数据结构之 线性表

线性表是最基本、应用最广泛的一种数据结构。

线性表的存储结构是指 为线性表所开辟的计算机存储空间以及采用的程序实现方法,其本质是逻辑结构到物理结构(存储结构)的映射。

线性表的存储结构主要分为两类:

1、定长的顺序存储结构,简称顺序表 

2、变长的线性存储结构,简称链表(亦称链式存储结构)

  顺序表 链表
定义

顺序存储

将线性表的所有数据元素,按其逻辑顺序依次存储在一组连续的内存单元中,

用这种存储形式存储的线性表,称为线性表

链接存储

通过一组地址任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的,

也可以是不连续的,用这种存储形式存储的线性表,称为链表

建立

通过创建数组来建立,顺序表中的每个数据元素按其顺序有唯一的索引值,

又称下标值,可以方便地访问数据元素内容

从空表开始,每读入一个数据元素就申请一个相应的存储单元,对于每一个数据元素ai

除了存放数据元素自身的数据信息外,还需要一个存放其直接后继ai+1的存储地址,

其中存放自身数据的data称为数据域,存放直接后继地址的next称为指针域,这两部分构成一个“结点”。

链表正是通过每一个结点的指针域,将线性表中的结点按其逻辑顺序依次连接在一起的

内存分配方式

(基于空间考虑)

静态分配。程序执行前必须明确规定存储规模 动态分配。无需预先估计存储规模,可根据需要随时申请动态分配内存。

存储密度

(基于空间考虑)

为1。易于事先确定其大小时,宜采用顺序表作为存储结构 <1。指针域占了部分存储量

存取方法

(基于时间考虑)

随机存取结构。对表中任一结点都可在O(1)时间内直接取得。

如果线性表的操作主要是进行查找,很少做插入和删除操作,

应采用顺序表作为存储结构为宜

顺序存取结构。

链表中的结点需从头指针起,顺着链表扫描才能取得,其时间复杂度为O(n)

插入、删除操作

(基于时间考虑)

在顺序表中进行插入和删除,平均要移动表中近一半的结点,

尤其是当每个结点的信息量较大时,移动结点的时间开销就相当可观了,

其时间复杂度为O(n) 

在链表中的任何位置上进行插入和删除,都只需要修改指针。

对于频繁进行插入和删除的线性表,宜采用链表作为存储结构。

如果表的插入和删除主要发生在表的首尾两端,则最好采用尾指针表示的单循环链表。

存储密度:结点数据本身所占的存储量和整个结点结构所占的存储量之比

即存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量)、

存储密度越大,则存储空间的利用率就越高

共同学习,共同进步,若有补充,欢迎指出,谢谢!

原文地址:https://www.cnblogs.com/dengguangxue/p/10764930.html