链表的创建(C语言实现)

学习链表之前,我们要知道为什么要引入链表。

C语言中的数组使用之前,我们必须要定义数组的大小。但是当我们不知道数据个数(或者很大)时,定义数组大小就成了一个困扰,而且对于这么多数据的处理也会很麻烦。所以,定义“动态大小”,“单独操作几个元素”就成了此时一个方便的选择。

接下来我们来学习如何创建一个链表。

1.什么是结点

所谓节点,就是用于存放数据与指向下一节点的地址

节点的代码实现:

 

struct node{
    int data;
    struct node *next;
};

 

2.用指针指向节点

创建节点后,我们要用第一个指针指向该节点,称为头指针,同时要初始化头指针。

struct node *head;
head=NULL;

3.向节点中输入数据并创建临时指针指向该节点

我们先创建临时指针并申请动态空间去指向一个节点,这样就可以通过指针向节点中输入数据了。



struct node *p,*q;
p=q=(struct node *)malloc(sizeof(struct node));//申请动态空间
scanf("%d",&(p->data));

待会会讲到指针q的作用。

4.判断是否为第一个节点

如果输入的是第一个(组)数据,那么应用头指针指向这个节点

if(head==NULL)head=p;

否则,就将上一个指针的后继节点指向该节点

如何实现呢?

这时,我们需要提前创建一个新指针用于存放上一指针的信息。即上面已经定义了的q指针。然后将上一指针(q)的后继节点指向当前节点(p)

else q->next=p;

5.指向当前节点并输入下一个(组)数据

连接上一节点的后继节点与当前节点后,我们需要将上一节点更新为当前节点。输入下一个(组)数据的方法与第三点的申请动态空间和向节点中输入数据相同。


  q=p;
  p=(struct node *)malloc(sizeof(struct node));
  scanf("%d",&(p->data));

6.结束输入

数据输入完后,我们需要将最后一个数据的下一节点指向NULL

q->next=NULL;

下面是完整的代码实现:

 1 #include<stdio.h>
 2 #include<malloc.h>
 3 struct node{
 4     int data;
 5     struct node *next;
 6 };
 7 int main()
 8 {
 9     struct node *head,*p,*q;
10     head=NULL;
11     p=q=(struct node *)malloc(sizeof(struct node));
12     scanf("%d",&(p->data));
13     while(p->data!=0)
14     {
15         if(head==NULL)head=p;
16         else q->next=p;
17         q=p;
18         p=(struct node *)malloc(sizeof(struct node));
19         scanf("%d",&(p->data));
20     }
21     q->next=NULL;
22     while(head)
23     {
24         printf("%d\n",head->data);
25         head=head->next;
26     }
27     return 0;
28  } 

 

谢谢观看,如有问题欢迎提出并指正。

 

posted @ 2019-03-22 14:20  Maze_End  阅读(1253)  评论(0编辑  收藏  举报