考虑Linked List
中的一些C
。如下面的代码所示:
struct path {
int node;
struct path *next;
};
我想要有很多这个链表。我怎么能拥有它?例如:
1,2,3
1,5,6
1,3,5,7
这是我的链接列表的三个实例,我需要将它们的大小存储在列表中。
所以,我不知道怎样才能拥有链接列表的许多实例并将它们存储到列表中(我应该使用另一个链接列表吗?)。
答案 0 :(得分:1)
您的struct path
是整数的链接列表。如果您想要一个路径列表,您也可以定义它:
struct path_list {
struct path *path;
int path_size; /* optional: a place to store the size of "path" rather than recomputing it all the time */
struct path_list *next;
};
要使用任何类型的链接列表,通常需要定义分配/释放/操作/查询列表的函数。所以你可能有
struct path *new_path_el(int node, struct path *next) {
struct path *rv = malloc(sizeof(struct path));
rv->node = node;
rv->next = next;
return rv; }
int path_size(struct path *path) {
int rv = 0;
while (path) {
++rv;
path = path->next; }
return rv; }
struct path_list *new_path_list_el(struct path *path, struct path_list *next) {
struct path_list *rv = malloc(sizeof(struct path_list));
rv->path = path;
rv->path_size = path_size(path);
rv->next = next;
return rv; }
允许您创建上面的示例:
new_path_list_el(
new_path_el(1, new_path_el(2, new_path_el(3, 0))),
new_path_list_el(
new_path_el(1, new_path_el(5, new_path_el(6, 0))),
new_path_list_el(
new_path_el(1, new_path_el(3, new_path_el(5, new_path_el(7, 0)))), 0)))