Linked Lists (链表)
链表是一种线性数据结构,链表中的每一个元素都是一个单独的对象,我们将其称之为节点。每个节点包含一个数据域和一个指向下一个节点的指针域。这些节点可能存储在内存中的不同位置,而不像数组那样存储在连续的内存空间中。
链表中可以存储类似于数组的数据,但是相比数组,链表在存储上具有更多优势。
想象以下人的关系链。如果A认识B,B认识C,那么C就可以通过这个连接链接到A。每个人都可以被视为认识下一个人的节点。
在C语言中,我们定义一个包含数据域和指针域的Node如下:
struct Node{
int data;
int Node *next;
}
与数组相比具有的优势
与数组相比,链表具有以下两大优势:
- 没有固定大小 链表不需要固定内存大小。当创建一个新节点时,将动态分配用于存储节点的内存位置。没有使用的位置不会占据内存地址。与数组相比,数组智能一次性固定内存大小,且扩充或者缩减数组时代价会非常昂贵。
- 插入和删除效率极高 在节点之间进行快速删除和插入所花费的时间恒定。相反,处理数组时,插入和删除需要遍历数组中的所有元素。
算法复杂度
Access | Search | Insertion | Deletion | Space |
---|---|---|---|---|
O(n) | O(n) | O(1) | O(1) | O(n) |
与数组相比具有的劣势
与数组相比,使用链表存在一些缺点
-
仅能通过线性访问 由于数据是通过节点链接在一起的,因此任何节点只能由链接到该节点的节点访问,不能像数组那样通过索引访问,也不能随机访问节点,必须通过链接搜索所需元素
-
会占用较多内存空间 节点需要一些额外的内存空间来保存指向下一个节点的指针,因此每个元素相比数组会占用更多内存空间。
链表的创建
创建链表,我们需要根据需要创建链表的数据类型定义一个头节点。
每种类型的列表都具有特定的属性,并且据偶有关列表的优点。
链表的类型
链表的设计形式取决于链表的用途,其中最常见的3中链表类型如下:
- 单链表(Singly Linked List)
- 双链表(Double Linked List)
- 环形链表(Circular Linked List)
更多内容,欢迎关注:
来源:CSDN
作者:Sun.ME
链接:https://blog.csdn.net/JianZuoGuang/article/details/104317978