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

这是我在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;
    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
指针,可能还有一些填充位