Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建一个链接列表,其中一个节点指向多个其他注释?_C++ - Fatal编程技术网

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

C++ 如何创建一个链接列表,其中一个节点指向多个其他注释?,c++,C++,与此示例类似: 我想建立一个链接列表节点连接,如图所示,但我被卡住了,我应该如何继续 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),

与此示例类似:

我想建立一个链接列表节点连接,如图所示,但我被卡住了,我应该如何继续

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) {};
现在我有了这些函数和其他一些setter和getter函数。

这张图是一个:

  • 有一个由5个元素组成的数组,每个图形节点一个元素
  • 每个数组元素都是相邻节点编号的(单链接)列表
  • 每个列表元素的值是该图形节点相邻的图形节点号
  • 节点*邻接列表[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);
    }
    
    在实际应用程序中,您可能希望确保分配的内存不会泄漏(在本例中是泄漏的)或使用其他标准或第三方容器。

    该图片显示:

  • 有一个由5个元素组成的数组,每个图形节点一个元素
  • 每个数组元素都是相邻节点编号的(单链接)列表
  • 每个列表元素的值是该图形节点相邻的图形节点号
  • 节点*邻接列表[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);
    }
    

    在实际应用程序中,您可能希望确保分配的内存不会泄漏(在本例中为泄漏)或使用其他标准或第三方容器。

    那么我应该为追随者创建一个数组吗?如果是这样,如果我想添加更多节点,动态内存分配会更好吗?谢谢。@ExperiencedSoup
    followers
    是一个链表,而您的
    节点
    是一个链表元素。每个
    节点
    必须通过
    新节点
    从堆中分配。您需要代码将列表节点附加到表示为
    节点*
    的列表中。那么我应该为追随者创建一个数组吗?如果是这样,如果我想添加更多节点,动态内存分配会更好吗?谢谢。@ExperiencedSoup
    followers
    是一个链表,而您的
    节点
    是一个链表元素。每个
    节点
    必须通过
    新节点
    从堆中分配。您需要代码将列表节点附加到表示为
    节点*
    的列表中。