首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链表中的链表(2D链表?)

链表中的链表(2D链表?)
EN

Stack Overflow用户
提问于 2015-06-19 16:31:53
回答 1查看 10.2K关注 0票数 4

我有一个txt文件,其中包含一个字符矩阵(矩阵中每个位置都有1或2个字符)。

人力资源S N Hw N L Z R W T_O O_O Ta _A I O S、S、E、T

就像这样。我所做的就是创建一个链接列表,并将此矩阵的每个元素存储在该列表中(单独)。

代码语言:javascript
复制
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>

代码语言:javascript
复制
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();
}

这段代码成功地提取了前六个元素,并将其作为列表的第一个元素,但随后它停止了工作。

EN

回答 1

Stack Overflow用户

发布于 2015-06-19 16:44:59

我会给你一点开始的提示。如您所知,链接列表节点包含一些数据和指向列表下一个元素的指针。你所说的“二维链接列表”实际上只是作为链接列表来实现的。列表中的每个节点指向另一个链接列表。因此,您需要定义一个新类型:

代码语言:javascript
复制
struct ListNode {
    DataNode* dataRowHead;
    struct ListNode* nextRow;
};

您要做的是将6个ListNode作为链接列表连接起来。每个ListNode包含一个指向DataNode的指针,该指针是与指向它的ListNode对应的行的链接列表的头。

我将由你来执行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30943029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档