C语言编程中的简单链表结构
这是我在C语言中的第一个链接列表程序,我正在尝试初始化节点的值并尝试打印它。然而,它并没有给我预期的输出。有人能告诉我哪里出了问题吗C语言编程中的简单链表结构,c,linked-list,C,Linked List,这是我在C语言中的第一个链接列表程序,我正在尝试初始化节点的值并尝试打印它。然而,它并没有给我预期的输出。有人能告诉我哪里出了问题吗 #include<stdio.h> #include<stdlib.h> struct node { int key; struct node *next; }; typedef struct node NODE; int main () { NODE a,b,c; NODE *list; lis
#include<stdio.h>
#include<stdlib.h>
struct node
{
int key;
struct node *next;
};
typedef struct node NODE;
int main ()
{
NODE a,b,c;
NODE *list;
list=&a;
list->key = 10;
list->next = &b;
list->next->key=20;
list->next->next=&c;
list->next->next->key=30;
list->next->next->next=NULL;
printf("%d %d %d", a,b,c);
return 0;
}
#包括
#包括
结构节点
{
int键;
结构节点*下一步;
};
typedef结构节点;
int main()
{
节点a、b、c;
节点*列表;
列表=&a;
列表->键=10;
列表->下一步=&b;
列表->下一步->键=20;
列表->下一步->下一步=&c;
列表->下一步->下一步->键=30;
列表->下一步->下一步->下一步=空;
printf(“%d%d%d”,a、b、c);
返回0;
}
它打印10和20,中间有一些垃圾。你真的不应该把整个结构(变量
a
,b
和c
)传递到printf()
)像这样,它甚至编译了吗
您要传递整数数据:
printf("%d %d %d\n", a.key, b.key, c.key);
当然,这完全忽略了节点之间的链接
在这种情况下,更“有趣”的是:
static void print_list(const NODE *head)
{
const NODE *prev = NULL;
for(; head != NULL; prev = head, head = head->next)
printf("%d ", head->key);
puts(prev != NULL ? "\n" : "");
}
然后在设置list
后从main()
调用它:
print_list(list); /* or print_list(&a); */
您还可以简化链表的创建:
a.key = 10;
a.next = &b;
b.key = 20;
b.next = &c;
c.key = 30;
c.next = NULL;
list = &a;
这更清楚地利用了所有节点都直接可用的事实,并删除了下面的歇斯底里链接。您想打印3个结构的值,它们都在每个结构的字段键中。所以你需要改变路线
printf("%d %d %d", a,b,c);
排队
printf("%d %d %d", a.key,b.key,c.key);
很奇怪,你没有从编译器那里得到警告,比如:
main.c:20:31: warning: format specifies type 'int' but the argument has type
'NODE' (aka 'struct node') [-Wformat]
垃圾是
struct node*next
指针,可能还有一些填充位