我有一个文本文件,其中包含一个字符矩阵(矩阵中每个位置都是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个元素列表的列表。希望我已经清楚地表达了我的愿望。我正在考虑创建另一个结构体,其中包含指向两个活动列表中每个列表的下一个指针,但仍不确定这个想法如何。您会怎样建议我去做呢?编辑
请给予一点帮助... 我已经重新实现了所有功能以适应您(@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
? - NathanOlivervector
。 - Rorschachchar [3]
和指向该列表下一个成员的指针的元素。现在,我将拥有n个这些列表(所有列表都将包含6个元素)。如何创建一个链表来容纳这些6个元素(较小的)列表?编辑:仍然需要能够访问任何较小链接列表中的每个元素。 - Rorschach