一、链表的定义
链表,别名链式存储结构或单链表,用于存储逻辑关系为“一对一”的数据。
二、链表的节点
- 数据域:数据元素本身,其所在的区域。
- 指针域:指向直接后继元素的指针,所在的区域。
链表中存储各元素的结构如图所示:
注:链表实际存储的是一个一个的结点,真正的数据元素包含在这些结点中,如下图所示:
三、链表节点的实现
注:由于指针域中的指针要指向的也是一个节点,因此要声明为struct Node类型。
示例:
四、链表添加
原理:
判断链表是否有结点,如果没有,则头指针指向新来的结点,尾指针指向新来的结点,如果有,则尾结点的下一个指向新来的结点,尾指针指向新来的结点。
示例:
五、链表插入
原理:
- 头插入:新来的结点的下一个指向头结点,头指针指向新来的结点。
- 中间插入:遍历链表,找到插入位置的前一个结点,新来的结点的下一个指向标记的下一个,标记的下一个指向新来的结点。
- 尾插入:尾指针结点的下一个指向新来的结点,尾指针指向新来的结点。
注:链表插入是先连接后断开。
六、链表删除
原理:
- 头删除:删除标记指向头结点,头指针指向头结点的下一个,释放。
- 中间删除:遍历链表,找到删除结点前一个结点,删除标记指向遍历标记的下一个,遍历标记的下一个指向遍历标记的下一个的下一个,释放。
- 尾删除:如果标记的下一个为空,则尾指针指向标记的下一个。