我有一个txt文件,其中包含一个字符矩阵(矩阵中每个位置都有1或2个字符)。
人力资源S N Hw N L Z R W T_O 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*。这样,我只能打印整个矩阵的次数,因为文件中有行。我有什么is>
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();
}这段代码成功地提取了前六个元素,并将其作为列表的第一个元素,但随后它停止了工作。
发布于 2015-06-19 16:44:59
我会给你一点开始的提示。如您所知,链接列表节点包含一些数据和指向列表下一个元素的指针。你所说的“二维链接列表”实际上只是作为链接列表来实现的。列表中的每个节点指向另一个链接列表。因此,您需要定义一个新类型:
struct ListNode {
DataNode* dataRowHead;
struct ListNode* nextRow;
};您要做的是将6个ListNode作为链接列表连接起来。每个ListNode包含一个指向DataNode的指针,该指针是与指向它的ListNode对应的行的链接列表的头。
我将由你来执行。
https://stackoverflow.com/questions/30943029
复制相似问题