单链表的定义
由于顺序表的插入删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储——单链表。单链表通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它不要求在逻辑上相邻的两个元素在物理位置上也相邻。
- 单链表的特点:
1.单链表不要求逻辑上相邻的两个元素在物理位置上也相邻,因此不需要连续的存储空间。
单链表是非随机的存储结构,即不能直接找到表中某个特定的结点。查找某个特定的结点时,需要从表头开始遍历,依次查找。
对于每个链表结点,除了存放元素自身的信息外,还需要存放一个指向其后继的指针。
下面代码是单链表的单个节点的描述,以及自定义数据类型
typedef int SLDatatype;
typedef struct SListNode
{
SLDatatype data;
struct SListNode* next;
}SLTNode;
对于其增删查改查的操作,本人不在这里花大篇幅放代码并详解,因为本文主要是让大家了解单链表和双链表的优缺点。
单链表的优点:
1、在于它可以在任意位置插入和删除一个数据
2、没有扩容的问题,可以malloc一个节点进行插入
单链表的缺点:
1、在于它以节点为单位存储,不支持随机查找,并且查找起来较为麻烦,需要遍历一遍,所以在平常不经常使用。
2、在进行增删查改时,需要遍历查找目标节点和前一节点,较为麻烦
上图为单链表示意图。
双链表的定义
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
以下代码是双链表的结构,以及自定义数据类型
typedef int LTDataType;//定义自定义类型
typedef struct ListNode//定义结构体
{
struct ListNode* next;
struct ListNode* prev;
LTDataType data;
}LTNode;
双链表的优点:
1、对结点的删除等操作比单链表便捷,不需要记录前一结点的位置,就可以对目标节点进行增删查改
双链表的缺点:
1、创建和修改节点时较为麻烦,对于不熟练的新手会时常出现链接节点的先后顺序颠倒等问题。
上图为双链表的示意图
单链表和双链表进行比较之后,你会明显的发现双链表更加的方便好用,以至于你会忘记单链表是什么,哈哈哈哈哈。
学习完了单链表再去学习双链表,会友好很多,并且你会发现,双链表和单链表就好比倚天剑和普通铁剑的区别,越发喜欢用双链表。