线性表的定义和基本操作
线性表的特点:
- 表中元素个数是有限的。
- 表中元素具有逻辑上的顺序性,表中元素有其先后次序。
- 表中元素都是数据元素,每个元素都是单个元素。
- 表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间。
- 线性表是逻辑结构,具有抽象性。
线性表的基本操作:
需要自己动手去写!!!
线性表的存储结构
顺序存储
1.线性表的顺序存储结构是一种随机存取的存储结构。
2.线性表的顺序存储结构的一维数组可以是静态分配的,也可以是动态分配的。
基本操作
- 增
- 删
- 插(按值查找和按位查找)
线性表的链式存储
单链表
1.线性表的链式存储又称单链表。
2.单链表是非随机存取的存储结构。查找某个特定的节点时,需要从表头开始遍历,依次查找。
3.通常用一个头指针来标识一个单链表。
4.为了操作上的方便,通常在单链表的第一个节点前附加一个节点,称为头节点。头节点的数据域可以不设任何信息,也可以记录表长等信息。头节点的指针域指向线性表的第一个元素节点。
建立单链表
-
头插法建立单链表
该方法从一个空表开始
生成新的节点
并将读取到的数据存放到新节点的数据域中
然后将新节点插入到当前链表的表头,即头节点之后
==注:==采用头插法建立单链表时,读取数据的顺序与生成的链表中的顺序是相反的。
-
尾插法建立单链表
该方法将新节点插入到当前链表的表尾,为此必须增加一个尾指针r,使其始终指向当前链表的尾节点。
其他操作
- 按值查找
- 按序号查找
- 插入节点
- 检查插入位置的合法性
- 找到插入位置的前驱节点
- 在其后插入节点
- 删除节点
- 检查删除位置的合法性
- 找到待删除位置的前驱节点
- 删除节点
- 求表长
双链表
1.双链表相对于单链表新增了指向前驱节点的指针。
2.双链表在插入和删除操作上和单链表有很大不同。
循环链表
-
循环单链表
1.循环单链表和单链表的区别在于,表中最后一个节点的指针不是NULL,而改为指向头节点。
2.循环单链表的判空条件不是头节点的指针是否为空,而是它是否等于头指针。
3.有时对单链表常做的操作时在表头和表尾进行的,所以对循环单链表不仅设置头指针,而且设置尾指针,如此,对表头和表尾进行操作都只需要O(1)的时间复杂度。
-
循环双链表
和循环单链表不同的是,头节点的prior指针要指向表尾节点。
静态链表
1.静态链表借助数组来表述线性表的链式存储结构。
2.节点有指针域、数据域。指针域中是节点的相对地址(数组下标)。
3.静态链表也需要预先分配一块连续的存储空间。
4.以指针域next == -1 作为其结束的标志。