在系统的学习完C语言的结构体后,我们应该对链表的建立及基本操作进行学习。本文将介绍链表的建立,头插和尾插,以及链表的增删改查。
1.链表的建立
在了解链表的建立之前,让我们先来了解一下链表的实现基础。链表是基于结构体来实现的,在学习结构时,我们建立结构体数组后访问时需要用循环遍历,那么有没有一种办法把他们自己连起来,我们通过第一个结构体,就可以去访问整个结构体数组。这样,我们想到用指针可以去存储位置,所以通过结构体指针我们就可以实现。
结构体代码如下:
typedef struct node{
int x;//存储数据
struct node *next;//保存指针指向下一个结构体
}j,*link;
下面我们来建立链表的头部
link creat()
{
j *head;
head=(j*)malloc(sizeof(j));//分配内存空间
head->next=NULL;//开始时指向为空
return head;
}
接下来,我们建立链表
void init(link head)
{
j *r=head,*s;
int d;
while(scanf("%d",&d)!=EOF)//输入数字
{
s=(j*)malloc(sizeof(j));//分配新的内存空间
s->x=d;
r->next=s;//头指向新指针
r=s;//将指针刷新位置
}
r->next=NULL;
}
void init(link head)
{
j *r=head,*s;
int d;
while(scanf("%d",&d)!=EOF)//输入数字
{
s=(j*)malloc(sizeof(j));//分配新的内存空间
s->x=d;
s->next=r-next;//尾插法
r-next=s;
}
}
这样,我们就建立了一个链表。建立链表时大家尽量建立为有头指针,这样在进行后面的操作时能减少错误,比如删除第一个节点时;
2.链表的增,删
在建立链表后,增加节点在我们建立链表时就已经操作了;
我们首先需要找到插入位置的前一个节点。因为,为了放止后面的链表地址失去,我们先将前一个节点的后一个节点地址记录然后让新节点指向记录的节点。然后前一个指向新节点。
代码如下
viod zeng(link head,int n)
{
j *r=head,*s;
for(int i=1;i<x;i++)//找到需要添加位置的前一个位置
{
r=r->next;
}
s=(j*)mallloc(sizeof(j));
scanf("%d",&s->x);
s->next=r->next;//将节点插入进去
r->next=s;
}
链表的删除,跟增加相同我们需要找到,删除节点的前一个节点,然后前一节点指向删除节点的后一个节点。
viod zeng(link head,int n)
{
j *r=head,*s;
for(int i=1;i<x;i++)//找到需要删除位置的前一个位置
{
r=r->next;
}
s=r->next;
r->next=s->next;
free(s);
}
3.链表的查找和更改
链表的查找和更改操作,因为NULL指针在c中等同于0
所以,我们从头节点一次往后查找,因为我们链表的最后为NULL;
代码如下:
link cha(link head,int n)
{
j *r=head;
while(r)
{
if(r->x==n)//找到存储的数
{
break;}
r=r->next;
}
return r;
}
找到节点后我们就可以更改节点数据,和打印节点数据。