1.链表基础概念
本质:物理上不连续,但是逻辑上连续的线性数据结构
1.如何让两个不连续的内存空间,存在逻辑上的联系:
让每个空间,分成两个存储空间(数据域+指针域)
区域一:存放数据;区域二:存放下一块内存地址空间的地址
链表的重要特性:
1.链表的最后一个节点中的指针域总是存放NULL
2.分类
2.1单向链表和双向链表
单向链表:节点只有一个指针域,指向下一个节点
优点:简单,易理解
缺点:只能从前往后查找数据
双向链表:节点中有一个数据域,但是有两个指针域,一个指针域指向下一个节点;另一个指针域指向上一个节点
优点:节点的查找与增删非常灵活
缺点:实现起来稍微复杂,增加存储负担(多了一个指针域)
2.2循环链表和非循环链表
非循环链表:
单向:指针域总是指向下一个节点,最后一个节点总是指向空,表示结束
双向:头节点的prev指向空,最后一个节点的next指向空
循环链表:
单向:末尾节点的next总是指向头节点
双向:末尾节点的next总是指向头节点;头节点的prev总是指向末尾节点
2.3带头链表和不带头链表
带头链表:头节点中不存放数据,单纯当作链表起始点存在
不带头链表:头节点中也存放数据,并没有固定的节点