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]
足以表示这一点
工作示例:
#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]
足以表示这一点
工作示例:
#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
是一个链表,而您的节点
是一个链表元素。每个节点
必须通过新节点
从堆中分配。您需要代码将列表节点附加到表示为节点*
的列表中。那么我应该为追随者创建一个数组吗?如果是这样,如果我想添加更多节点,动态内存分配会更好吗?谢谢。@ExperiencedSoupfollowers
是一个链表,而您的节点
是一个链表元素。每个节点
必须通过新节点
从堆中分配。您需要代码将列表节点附加到表示为节点*
的列表中。