线性表是最基本、应用最广泛的一种数据结构。
线性表的存储结构是指 为线性表所开辟的计算机存储空间以及采用的程序实现方法,其本质是逻辑结构到物理结构(存储结构)的映射。
线性表的存储结构主要分为两类:
1、定长的顺序存储结构,简称顺序表
2、变长的线性存储结构,简称链表(亦称链式存储结构)
顺序表 | 链表 | |
定义 |
顺序存储 将线性表的所有数据元素,按其逻辑顺序依次存储在一组连续的内存单元中, 用这种存储形式存储的线性表,称为线性表 |
链接存储 通过一组地址任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的, 也可以是不连续的,用这种存储形式存储的线性表,称为链表 |
建立 |
通过创建数组来建立,顺序表中的每个数据元素按其顺序有唯一的索引值, 又称下标值,可以方便地访问数据元素内容 |
从空表开始,每读入一个数据元素就申请一个相应的存储单元,对于每一个数据元素ai, 除了存放数据元素自身的数据信息外,还需要一个存放其直接后继ai+1的存储地址, 其中存放自身数据的data称为数据域,存放直接后继地址的next称为指针域,这两部分构成一个“结点”。 链表正是通过每一个结点的指针域,将线性表中的结点按其逻辑顺序依次连接在一起的 |
内存分配方式 (基于空间考虑) |
静态分配。程序执行前必须明确规定存储规模 | 动态分配。无需预先估计存储规模,可根据需要随时申请动态分配内存。 |
存储密度 (基于空间考虑) |
为1。易于事先确定其大小时,宜采用顺序表作为存储结构 | <1。指针域占了部分存储量 |
存取方法 (基于时间考虑) |
随机存取结构。对表中任一结点都可在O(1)时间内直接取得。 如果线性表的操作主要是进行查找,很少做插入和删除操作, 应采用顺序表作为存储结构为宜 |
顺序存取结构。 链表中的结点需从头指针起,顺着链表扫描才能取得,其时间复杂度为O(n) |
插入、删除操作 (基于时间考虑) |
在顺序表中进行插入和删除,平均要移动表中近一半的结点, 尤其是当每个结点的信息量较大时,移动结点的时间开销就相当可观了, 其时间复杂度为O(n) |
在链表中的任何位置上进行插入和删除,都只需要修改指针。 对于频繁进行插入和删除的线性表,宜采用链表作为存储结构。 如果表的插入和删除主要发生在表的首尾两端,则最好采用尾指针表示的单循环链表。 |
存储密度:结点数据本身所占的存储量和整个结点结构所占的存储量之比
即存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量)、
存储密度越大,则存储空间的利用率就越高
共同学习,共同进步,若有补充,欢迎指出,谢谢!