C中的一级链表实现问题



我是C编程的新手,正在从一本书中学习,所以如果以下内容太基础,我很抱歉。我正试图实现一级链表,下面的程序在执行时会给我一个错误";分段错误:11〃;。

#include <stdlib.h>
typedef struct node* link;
typedef struct node {int item; link next;} node;
typedef struct linked_list {link head; link tail;} linked_list; 
int main(void)
{
link x;
x = malloc(sizeof(node));
x->next = NULL;
x->item = 12;
linked_list* l;
l->head = x;
}

相同的程序没有链表指针,而只是带有:

linked_list l;
l.head = x;

跑得很好。然而,我需要多个列表,所以我最终会想要指针,而且我似乎不知道出了什么问题。有人知道可能的解决方案吗?提前谢谢。

我正在尝试实现一流的链表

术语";第一类链表";毫无意义。实际上,您正在尝试实现的是一个双边单链列表。

在这个代码片段

linked_list* l;
l->head = x;

您使用的是具有不确定值的未初始化指针l。因此,取消引用它会导致未定义的行为。

相反,你可以写例如

linked_list l = { .head = x, .tail = x };

声明结构类型的对象并初始化其两个数据成员。

如果您想使用指向链表的指针,那么可以动态地分配类型为linked_list的对象,例如

linked_list* l = malloc( sizeof( *l ) );
l->head = x;
l->tail = x;

严格地说,最初的列表应该是空的。

linked_list* l = malloc( sizeof( *l ) );
l->head = NULL;
l->tail = NULL;

您需要编写一个函数,将新节点添加到链表中。

最新更新