首页 理论教育 链表的逻辑实现与存储结构

链表的逻辑实现与存储结构

时间:2023-11-19 理论教育 版权反馈
【摘要】:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。第一个存放数据元素的节点称作首元节点,头节点指向首元节点。

链表的逻辑实现与存储结构

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。

链表根据构造方式的不同可以分为:

·单向链表

·单向循环链表

·双向链表

1.单向链表

单链表有带头节点和不带头节点两种结构,其结构如图9-8所示。

图9-8 单向链表的两种结构

在带头节点的单链表中,其第一个节点被称作头节点。第一个存放数据元素的节点称作首元节点,头节点指向首元节点。头节点是为了操作的统一与方便而设立的,其一般不放数据(也可存放链表的长度、用作监视哨等)。此节点不能计入链表长度值。

带头节点的单链表的优点:

·在链表第一个位置上进行的操作(插入、删除)和其他位置上的操作一致,无须进行特殊处理;

·无论链表是否为空,head一定不为空,这使得空表和非空表的处理一致。

由于带头节点的链表更容易操作,这里仅实现带头节点的单链表

带头节点的链表插入与删除示意图(见图9-9):

图9-9 带头结点的链表插入与删除操作

单链表效率分析:

在单链表上插入和删除数据时,首先需要找出插入或删除元素的位置。对于单链表其查找操作的时间复杂度为O(n),所以(www.xing528.com)

·链表插入和删除操作的时间复杂度均为O(n)

·链表读取操作的时间复杂度为O(n)

单链表优缺点:

·优点:不需要预先给出数据元素的最大个数,单链表插入和删除操作不需要移动数据元素

·缺点:不支持随机读取,读取操作的时间复杂度为O(n)。

2.单向循环链表

将单链表中终端节点的指针指向头节点,使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。

对于循环链表,为了使空链表与非空链表处理一致,通常设一个头节点。如图9-10所示:

图9-10 单向循环链表

3.双向链表

双向链表是在单链表的每个节点中,再设置一个指向其前驱节点的指针域。使得两个指针域一个指向其前驱节点,一个指向其后继节点。

对于双向链表,其空和非空结构如图9-11所示:

图9-11 双向链表

双向链表是单链表扩展出来的结构,它可以反向遍历、查找元素,它的很多操作和单链表相同。这些操作只涉及一个方向的指针即可。插入和删除操作时,需要更改两个指针变量

插入操作:注意操作顺序

双向链表相对于单链表来说占用了更多的空间,但由于其良好的对称性,使得能够方便的访问某个节点的前后节点,提高了算法的时间性能。是用空间换时间的一个典型应用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈