繁体   English   中英

如何创建一个链接列表,其中一个节点指向多个其他注释?

[英]How can I create a linked list where one node is pointing to more than one other note?

与此示例类似:

在此处输入图像描述

我想建立一个如图所示的链表节点连接,但我卡住了,我应该如何进行?

class Node{

public:
    int id;
    int count;
    int *next;
    int *prev;
    Node(int a): id(a), count(0), next(NULL), prev(NULL) {};
    Node(const int & ss, const int &c): id(ss), count( c), next(NULL), prev(NULL) {};

现在我有这些以及其他一些设置器和获取器功能。

该图片是一个图形邻接列表,其中:

  1. 有一个包含 5 个元素的数组,每个图形节点一个。
  2. 每个数组元素都是相邻节点编号的(单链)列表。
  3. 每个列表元素的值是该图节点与之相邻的图节点编号。

Node* adjacency_list[5]足以代表这一点。

工作示例:

#include <iostream>

class Node {
public:
    int id;
    Node *next;
    Node *prev;
    Node(int a): id(a), next(0), prev(0) {}
};

Node* make_list(std::initializer_list<int> ids) {
    Node* head = 0;
    Node** ptail = &head;
    for(int id : ids) {
        *ptail = new Node(id - 1);
        ptail = &((**ptail).next);
    }
    return head;
}

void print_list(Node** heads, int count) {
    for(int i = 0; i < count; ++i) {
        std::cout << (i + 1) << ": ";
        for(Node* n = heads[i]; n; n = n->next)
            std::cout << (n->id + 1) << ',';
        std::cout << '\n';
    }
}

int main() {
    Node* adjacency_list[5] = {};
    adjacency_list[1 - 1] = make_list({2, 3, 4});
    adjacency_list[2 - 1] = make_list({4, 5});
    adjacency_list[3 - 1] = make_list({1, 2, 5});
    adjacency_list[4 - 1] = make_list({5});
    adjacency_list[5 - 1] = make_list({4});
    print_list(adjacency_list, 5);
}

Output:

1: 2,3,4,
2: 4,5,
3: 1,2,5,
4: 5,
5: 4,

在实际应用程序中,您可能希望确保分配的 memory 不泄漏(在本例中泄漏)或使用std::forward_list或其他一些标准或第 3 方容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM