1.定义
由n个数据特性相同的元素构成的有限序列称为线性表。元素个数n定义为线性表的长度,n=0时称为空表。
对于非空线性表或线性结构,其特点是:
1、存在唯一一个被称作“第一个”的数据元素;
2、存在唯一一个被称作“最后一个”的数据元素;
3、除第一个以外,结构中的每个元素均只有一个前驱;
4、除最后一个以外,结构中的每个元素均只有一个后继。
2.线性表的顺序存储表示
用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构,称这种存储结构的线性表为顺序表。线性表的顺序存储结构是一种随机存取的存储结构。
其查找、插入、删除算法的平均时间复杂度为O(n)。
3.线性表的链式存储表示
用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。对数据元素a来说,除了存储其本身的信息外,还需要存储一个指示其直接后继的信息,这两部分组成数据元素a的存储映像,称为结点。
结点包括两个域:存储数据元素信息的数据域、存储直接后继存储位置的指针域。指针域中存储的信息称作指针或链。n个结点链结成一个链表,即为线性表的链式存储结构,由于此链表的每个结点只包含一个指针域,故又称为线性链表或单链表。
单链表查找、插入、删除算法的平均时间复杂度为O(n)。
4.顺序表和链表的比较
1、空间性能的比较
顺序表:存储空间必须预先分配,元素个数扩充受一定限制,易造成存储空间浪费或空间溢出现象。存储空间利用率为100%。
链表:不需要为其预先分配空间,只要内存空间允许,链表中的元素个数没有限制。存储空间利用率为50%。
总结:当线性表长度变化较大,难以预估存储规模时,宜采用链表作为存储结构;当线性表长度变化不大,易于实现确定其大小时,为了节约存储空间,宜采用顺序表作为存储结构。
2、时间性能的比较
顺序表:随机存储结构,指定任意位置序号i,都可以在O(1)时间内直接存取该位置上的元素,即取值操作效率高。
链表:顺序存储结构,按位置访问链表中第i个元素时,只能从头开始依次向后遍历链表,直到找到第i个位置上的元素,时间复杂度为O(n),即取值操作效率低。
总结:当线性表的主要操作是和元素位置紧密相关的这类取值操作,很少做插入或删除时,宜采用顺序表作为存储结构;对于频繁进行插入或删除操作的线性表,宜采用链表作为存储结构。
5.有序表
若线性表中的数据元素相互之间可以比较,并且数据元素在线性表中依值非递减或非递增有序排列,则称该线性表为有序表。
将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是n。
6.循环列表
表中最后一个结点的指针域指向头结点,整个链表形成一个环。
7.双向链表
在双向链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱:p->next,p->prior。
双向链表也有循环表,链表中有两个环,所以只有一个表头结点的空表。
特点:p->next->prior=p->prior->next=p