数据结构之线性表
一、线性表的定义
- 线性表是指n个具有相同特性的数据元素的有限序列
- 线性表中数据元素之间关系是一对一的,除了第一个和最后一个数据元素之外,其他元素首尾相连(但是这句话只适用于大部分线性表,如循环链表不符合)
二、线性表的顺序存储结构
-
顺序表示:用一组地址连续的存储单元依次存储线性表的数据结构,它以“物理元素相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素
-
顺序表
- 顺序表是以数组形式保存的线性表,它将表中的结点依次存放在计算机内存中的一组地址连续的存储单元中
- 顺序表的插入删除操作需要移动大量的元素,效率低下,时间复杂度为O(n)
- 顺序表的存储结果在读、存数据时的时间复杂度为O(1)
- 顺序表参考示例
三、线性表的链式存储结构
-
链式表示:用一组任意的存储单元存储线性表中的数据元素。它的存储单元可以连续也可以不连续。在表示数据元素之间的逻辑关系时,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息1,这两部分组成结点,其中,存储数据元素信息的域称为数据域,存储直接后继存储位置的域称为指针域,指针域中存储的信息称为指针或链
-
(1)单链表
- 单链表是链式存储的一种数据结构,每个节点由元素(存储数据的存储单元)+指针(连接每个节点的地址数据)构成
- 单链表不需要连续的存储空间,可以是任意的,他们通过指针链接
- 单链表每次查找删除指定元素都需要从头结点开始遍历
- 单链表参考示例
-
(2)静态链表
- 使用一维数组描述指针的方法
- 方法思维:首先让数组元素由存放数据元素的data域和存放数据元素位置(相当于指针)的next域组成一个空间,再由一个存储该空间和空间中每一个数据元素是否被使用的数组组成整体,对这个整体进行操作,就是静态链表的运用
- 静态链表能帮助我们更好的理解链式存储怎么运行的
- 静态链表参考示例
-
(3)循环链表
- 将单链表中终端节点的指针端由空指针改为指向头结点,就使得整个单链表头尾相连,形成了一个循环链表
- 循环链表使得从表中任意元素出发都可以遍历整个链表
-
(4)双向链表
- 双向链表是在单链表的每一个结点中,再设置一个指向其前驱结点的指针域
- 双向链表使得对于任意给定的结点,都很容易获取其前结点和后结点,不用再遍历一次
四、心得体会
-
在实际运用中,需要结合存储、运算、环境的考虑来选择使用哪种存储结构,每一种存储结构都有它的优点缺点,需要我们分析选择合适的方法
-
书写代码需要做到规范,风格统一