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

时间:2023-03-08 18:51:02
链表的创建(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;

下面是完整的代码实现:

 #include<stdio.h>
#include<malloc.h>
struct node{
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q;
head=NULL;
p=q=(struct node *)malloc(sizeof(struct node));
scanf("%d",&(p->data));
while(p->data!=)
{
if(head==NULL)head=p;
else q->next=p;
q=p;
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&(p->data));
}
q->next=NULL;
while(head)
{
printf("%d\n",head->data);
head=head->next;
}
return ;
}

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