未完待续
线性表分为顺序存储和链式存储结构。
线性表的顺序存储:用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的长度(线性表中数据元素的个数)应小于等于数组长度(放线性表的存储空间的长度)。
顺序存储结构的插入与删除。
线性表顺序存储结构的优缺点:
优点:
- 无须为表示表中元素之间的逻辑关系而增加额外的存储空间。
- 可以快速地存取表中任一位置的元素。
缺点:
- 插入和删除操作需要移动大量元素。
- 当线性表长度变化较大时,难以确定存储空间的容量。
- 造成存储空间的“碎片”。
线性表的链式存储:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。
- 单链表
- 静态链表
- 循环链表
- 双向链表
这里需要区分的是头指针和头结点之间的关系:
头指针是指向第一个结点的指针(当有头结点时指向头结点),且头指针不为空,是构成一个链表的必要元素。
头结点是为了方便操作而设立的,放在第一个元素结点之前,它的数据域没有意义,对于一个链表来说它不是一定要具备的。
顺序储存结构和单链表结构的对比:
- 存储分配方式不同:顺序存储结构要求在一个连续的存储单元中,单链表可以在任意单元内。
- 时间性能的差异:
1)查找(顺序存储结构**O(1),单链表**O(n))
2)插入和删除(**顺序存储结构**O(n),单链表O(1))
- 空间性能:顺序存储结构容易上溢,单链表不受限制。
静态链表
假设地址从0开始,一直到999,一共一千个地址。
默认规则:下标为0的单元存储cur第一个空闲单元,最后一个单元存储第一个已经存储的坐标。
初始化:下表为i的地址单元cur为i+1,最后一个为0。
插入:找到第一个空闲地址,把当前第二个空闲地址赋值到“下标为0”的单元,并赋值到第一个空闲地址中。
删除:把要删除的单元储存cur存为当前第一个空闲坐标,将第一个存储单位修改为要删除的单位储存。
循环列表
双向链表