正在载入交互式动画窗口请稍等
单链表-不带头节点 可视化交互式动画版
是程序中常用的链表。 如果我们谈论链表,则意味着它是单链表。 单向链表是一种包含两部分的数据结构,一部分是数据部分,另一部分是地址部分,其中包含下一个或后继节点的地址。 节点中的地址部分也称为 指针 。
在了解链表的类型之前,我们应该先了解什么是 链表 。 因此,要了解链接列表,请单击下面给出的链接:
链表的类型
以下是链表的类型:
单链表
假设我们有三个节点,这三个节点的地址分别是100、200和300。 三个节点用链表表示如下图所示:
从上图中我们可以观察到有三个不同的节点,地址分别为100、200和300。 第一个节点包含下一个节点的地址,即 200,第二个节点包含最后一个节点的地址,即 300,第三个节点在其地址部分包含 NULL 值,因为它不指向任何节点。 保存初始节点地址的指针称为 头指针 。
上图所示的链表被称为单链表,因为它只包含一个链接。 在这个列表中,只能向前遍历; 我们不能向后遍历,因为它在列表中只有一个链接。
单链表中节点的表示
- 结构节点
- {
- 整数 数据;
- 结构节点*下一个;
- }
在上面的表示中,我们定义了一个名为 节点的 用户定义结构,包含两个成员,第一个是整数类型的数据,另一个是节点类型的指针(next)。
要了解有关单链表的更多信息,请单击下面给出的链接:
双向链表
顾名思义,双向链表包含两个指针。 我们可以将双向链表定义为一个线性数据结构,由三部分组成:数据部分和另外两个地址部分。 换句话说,双向链表是一个在单个节点中具有三个部分的列表,包括一个数据部分、一个指向其前一个节点的指针和一个指向下一个节点的指针。
假设我们有三个节点,这些节点的地址分别是100、200和300。 这些节点在双向链表中的表示如下所示:
从上图中我们可以看出,双向链表中的节点有两个地址部分: 节点的一部分存储下 一个节点的地址 ,而节点的另一部分存储 前一个节点的地址 。 双向链表中的初始节点的地址部分为 NULL 值,它提供了前一个节点的地址。
双向链表中节点的表示
- 结构节点
- {
- 整数 数据;
- 结构节点*下一个;
- 结构节点 *prev;
- }
在上面的表示中,我们定义了一个名为 节点 的用户自定义结构体,它具有三个成员,一个是整数类型的 数据 ,另外两个是指针,即 节点类型的 next和prev 。 next 指针 变量保存下一个节点的地址, prev指针 保存前一个节点的地址。 这两个指针(即next 和prev) 的类型 都是 struct node ,因为这两个指针都存储 struct node 类型的节点的地址。
要了解有关双向链表的更多信息,请单击下面给出的链接:
循环链表
循环链表是单链表的变体。 单向链表 和 循环链表 唯一的区别 是,单向链表的最后一个节点不指向任何节点,因此它的链接部分包含NULL值。 另一方面,循环链表是最后一个节点连接到第一个节点的列表,因此最后一个节点的链接部分保存着第一个节点的地址。 循环链表没有起始和结束节点。 我们可以向任何方向遍历,即向后或向前。 循环链表的图示如下:
- 结构节点
- {
- 整数 数据;
- 结构节点*下一个;
- }
循环链表是一个元素序列,其中每个节点都有到下一个节点的链接,最后一个节点有到第一个节点的链接。 循环链表的表示与单链表类似,如下所示:
要了解有关循环链表的更多信息,请单击下面给出的链接:
双向循环链表
双向循环链表兼有循环链表 和 双向链表 的特点 。
上图显示了双向循环链表的表示,其中最后一个节点附加到第一个节点,从而创建一个循环。 它也是一个双向链表,因为每个节点也保存前一个节点的地址。 双向链表和双向循环链表的主要区别在于,双向循环链表不包含节点前一个字段中的NULL值。 由于双向循环链表包含三部分,即两个地址部分和一个数据部分,因此其表示形式与双向链表类似。
- 结构节点
- {
- 整数 数据;
- 结构节点*下一个;
- 结构节点 *prev;
- }