我有一个包含字符矩阵的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*
。这样我只打印整个矩阵的次数与文件中的行数一样多。
我所拥有的是&gt;
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();
}
此代码成功提取前六个元素,并将其作为列表的第一个元素,但随后它停止在那里工作。
答案 0 :(得分:2)
我会给你一些提示开始。如您所知,链表节点包含一些数据和指向列表下一个元素的指针。您所谓的“二维链表”实际上只是作为链表的链表实现。列表中的每个节点都指向另一个链表。所以你需要定义一个新类型:
struct ListNode {
DataNode* dataRowHead;
struct ListNode* nextRow;
};
您要做的是将6 ListNode
个连接为链接列表。每个ListNode
都包含一个指向DataNode
的指针,该ListNode
是与指向它的puts
对应的行的链接列表的头部。
我会将实施留给您。