线性表之链式存储结构的操作

回顾:

每个结点包含数据域以及指针域(用于存放下一个结点的位置信息)。

单链表是由很多个结点组成的,一个完整的单链表应该包括头结点,以及尾结点(NULL)。

单链表的读取思路(注意与顺序存储结构进行对比):

1. 声明一个指针p指向链表的第一个节点,并且初始化工作计数j.

2.进行循环while(j<i),指针不断后移,指向下一个节点,直到j=i,查找成功。这个时候取出数据P->data.

我们可以看出链表的结构中没有定义表长,所以我们无法使用for来控制循环,单链表读取的核心就是:工作指针后移查找。

一、单链表的插入和删除:

我们在顺序存储结构中已经看到,因为每个数据元素都是紧密相接,所以当我们进行操作的时候就会牵一发而动全身。但是对于链表来说,数据元素本来就是不是在一起的,所以我们可以通过改变要插入位置的前后联系关系来进行操作。这样就可以惊动最少的数据元素来插入或者删除数据。

s

如上图所示,当我们想要在ai和ai+1中插入数据的时候,我们只需要让ai知道自己的下一位目标是s就可以了,然后让s知道自己的下一位目标是ai+1. 这样的话,链表的插入操作就会变得很简单:s->next=p-next; p->next=s; 

而我们的链表删除就会变得更加的简单,我们只需要去掉中间的ai结点就可以了。

p->next=p->next->next;

删除:

答:设存储元素a1的结点为q,要实现将结点q删除单链表的操作,其实就是将它的前继结点的指针绕过,指向它的后继结点即可,如图。


单链表第i个数据删除结点的算法思路:

1. 声明一结点P指向链表第一个结点,初始化j从1开始;

2.当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加 1;

3.若到链表末尾p为空,则说明第i个元素不存在;

4.则查找成功,将欲删除的结点p->next賦值给q;

5. 单链表的删除标准语句p->next=q->next;

6.将q结点中的数据赋值给e,作为返回;

7.释放q结点;

7.  单链表整表创建的算法思路:

① 声明一结点P和计数器变量i;

② 初始化一空链表L;

③ 让L的头结点的指针指向NULL,即建立一个带头结点的单链表;

④ 循环:

♦生成一新结点賦值给P;

♦随机生成一数字賦值给P的数据域p->data;

♦将p插入到头结点与前一新结点之间。



尾插法:


8. 单链表整表删除

   当我们不打算使用这个单链表时,我们需要把它销毁,其实也就是在内存中将它 释放掉,以便于留出空间给其他程序或软件使用。

单链表整表删除的算法思路如下:

① 声明一结点p和q;

② 将第一个结点赋值给p;

③ 循环:

④ 将下一结点赋值给q;

⑤ 释放p;

⑥ 将q赋值给p。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。