链表中的链表(二维链表?
Linked list within a linked list (2D linked list?)
>我有一个 txt 文件,其中包含一个字符矩阵(矩阵中的每个位置都有 1 或 2 个)
C P O HR S A
NHw 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();
}
此代码成功提取前六个元素,并将其作为列表的第一个元素,但随后它在那里停止工作。
我会给你一点提示来开始。 如您所知,链接列表节点包含一些数据和指向列表下一个元素的指针。 你所谓的"二维链表"实际上可以简单地实现为链表的链接列表。列表中的每个节点都指向另一个链表。因此,您需要定义一个新类型:
struct ListNode {
DataNode* dataRowHead;
struct ListNode* nextRow;
};
您正在尝试执行的操作将有 6 个ListNode
作为链表连接。每个ListNode
都包含一个指向DataNode
的指针,该指针是与指向它的ListNode
对应的行的链接列表的头部。
我将把实施留给你。
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 将二维矢量传递给类
- 链表,反向函数,数据结构
- 将值从二维数组输出到文本文件
- 使用std::list创建循环链表
- 我在二维向量中是否正确分配了内存
- 将二叉树的节点插入链表 (C++)
- ASAN:将二叉树平展为链表时释放后堆使用
- 为什么我的二维表不正确显示
- 使用递归的二维链表复制构造函数
- 我的二维码阅读器应用无法打开链接
- 给定一个二叉树,设计一个算法,创建每个深度的所有节点的链表
- 转换二叉搜索树到链表
- 当条目以有序的方式添加时,二叉搜索树有效地充当链表
- 在c++中创建一个二维链表对象
- 如何编写一个程序,从键盘上填充一个二维整数表a[3][2]
- 链表中的链表(二维链表?