一、线性表基本概念
线性表是具有相同特性的数据元素的有限序列。元素有相同特性且为线性关系。
从具体应用种抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作。
顺序存储结构存在问题:存储空间分配不灵活以及运算的空间复杂度高。链式存储不需要额外的空间。
接下来会一一涉及顺序存储和链式存储
二、线性表的顺序表的表示和实现
1.线性表如何定义
顺序存储定义:逻辑上相邻的数据元素存储在物理上相邻的存储单元。(依次存储,占用一片连续的地址空间,中间没有空出存储单元;知道任一个元素位置,可以推算出其他元素存储位置;有任一元素可随机存取的优点)
2.类C语言
引用类型做形参是直接对实参操作,不产生实参的副本,时间和空间效率好。指针参数需要重复使用“*指针变量名”容易产生错误且阅读性较差。
3.顺序表示
两个部分来描述顺序表:顺序表的maxsize和表长。其逻辑位序和物理位序相差1。
顺序表是一个类型,Sqlist L,L是变量,是Sqlist这个类型的顺序表。
(1)基本操作
-
初始化
-
删除
-
清空
-
求长度
-
是否为空
(2)顺序表的取值
(3)顺序表的查找
元素的序号和地址差一,故返回地址为序号加1
平均查找长度ASL为查找次数的期望值
(4)顺序表的插入
插入时,只能插入在(0,n+1),即元素紧挨相邻不空位置
-
插入位置在最后
给最后一个元素赋值并且更改线性表长 -
插入位置在中间
后面的元素依次后移 -
插入位置在最前面
所有元素后移,第一个空出来之后插进去,表长加1。
(5)顺序表的删除
类似于插入,删除第i个位置的元素,就将i+1到n的数据都前移且表长减1。
总结
顺序表的时间复杂度都是O(n),空间复杂度都是O(1)(不需要辅助空间)。
优点:存储密度大+可以随机存取。
缺点:插入和删除时需要移动大量元素+定义数组会空着很多空间比较浪费+静态存储,数据个数不能自由扩充不灵活
存储密度:
链式存储优缺点:
顺序表和链表比较: