【发布时间】:2015-09-05 17:24:16
【问题描述】:
我有一个 txt 文件,其中包含一个字符矩阵(矩阵中每个位置 1 或 2 个)
C P O Hr S A
N Hw N L Z R
W T O O Ta A
I O S S E T
类似的东西。我设法做的是创建一个链接列表并将该矩阵的每个元素存储在该列表中(单独)。
struct DataNode{
char data[3];
struct DataNode *nextData;
};
void initNode(DataNode *head, char x[3]) {
for(int i=0; i<3; i++)
head->data[i]=x[i];
head->nextData=NULL;
}
void addNode(DataNode *head, char x[3]) {
DataNode *newNode = new DataNode;
for(int i=0; i<3; i++)
newNode->data[i]=x[i];
newNode->nextData=NULL;
DataNode *curr = head;
while(curr) {
if(curr->nextData==NULL) {
curr->nextData = newNode;
return;
}
curr = curr->nextData;
}
}
int main() {
char input[3];
if(in.is_open()) {
in>>input;
initNode(head,input);
for(int i=0; i<3; i++)
dieSide[i]=input[i];
while(in>>input) {
addNode(head,input);
}
in.close();
}
}
到目前为止,这一切正常,我想我对此很满意。
我现在需要的是另一个链表,其中的元素仍然是char[3] 类型,但首先必须有一个包含一行 6 个元素的列表,然后是另一个包含所有这 6 个元素的列表元素列表。
我希望我清楚自己的愿望。
我正在考虑创建另一个结构,用 next 指针指向两个活动列表中的每一个,但仍然不确定这个想法。
你会建议我怎么做?
编辑
请帮个忙...
我已经重新实现了所有功能以适合您(@Daniel)建议的结构,并且它们似乎有效。但是,我需要一种方法来“重置”我想用于创建小列表的DataNode*。这样,我只打印整个矩阵的次数与文件中的行数一样多。
我所拥有的是>
char input[3];
int counter=0;
struct DataNode *head = new DataNode; //creates a list of all elements
struct DataNode *head_side = new DataNode; //want to use this one to create smaller lists
struct DieSideNode *head_die = new DieSideNode; //creates a list of smaller lists
if(in.is_open()) {
in>>input;
initNode(head,input);
initNode(head_side, input);
counter++;
while(in>>input) {
addNode(head,input);
addNode(head_side, input);
counter++;
if( counter == 6 ) {
initSide(head_die, head_side);
head_side=0;
}else if(counter%6==0) {
addSide(head_die, head_side);
head_side=0;
}
}
in.close();
}
此代码成功提取了前六个元素,并将其作为列表的第一个元素,但随后停止工作。
【问题讨论】:
-
您不使用
std::list的任何原因? -
我有一个使用链表的请求,我自己也不知道为什么......另外,我想避免使用任何其他类型,如
vector。 -
您的问题到底是什么?你已经陈述了你想要做什么,但这个陈述本身基本上就是对问题的回答。
-
我有一个链表,其中包含
char[3]的元素和指向该列表下一个成员的指针。现在,我将拥有这些列表中的 n 个(所有列表将包含 6 个元素)。如何创建一个链接列表来保存这 6 个元素(较小的)列表?编辑:不过,我需要能够访问任何较小链表的每个元素。 -
@VladfromMoscow 似乎是教链表的家庭作业
标签: c++ linked-list singly-linked-list