1.线性表的定义
线性表(List):零个或多个数据元素的有限序列。线性表的元素之间存在着一一对应的关系,有且仅有一个开始和一个结束的节点,并且所有节点都最多有一个直接前驱和一个直接后继,头节点只有一个直接后继没有直接前驱,尾节点只有一个直接前驱没有直接后继,对线性表的操作主要有查找,插入和删除等。
2.线性表的分类
线性表可以分为一般线性表,栈,队列,字符串,数组,广义表等。
线性表按照物理存储结构的不同可以分为顺序表和链表,顺序表存储结构连续,链表在存储结构上不连续但是逻辑上是连续的。
顺序表:
顺序表是在计算机内存中以( 一组地址连续 )的存储单元依次存储数据元素的线性结构。
顺序表效率分析:
顺序表插入和删除一个元素,最好情况下其时间复杂度(这个元素在最后一个位置)为O(1),最坏情况下其时间复杂度为O(n)
顺序表支持随机访问,读取一个元素的时间复杂度O(1)
顺序表的优缺点:
优点:支持随机访问
缺点:插入和删除操作需要移动大量的元素,造成存储空间的碎片。
顺序表适合元素个数变化不大,且更多是读取数据的场合。
链表:
链表定义:链表是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点里存放下一个节点的位置信息(即地址)
顺序表存储数据信息 而链表存储下一个节点的位置( 地址 )
链表的分类:
1、 单向链表
2、单向循环链表
3、双向链表
3.线性表的抽象数据类型
线性表的抽象数据类型定义如下:
ADT 线性表(List)
Data
线性表的数据对象集合为{a1, a2, …… ,an},其中每个元素的类型均为DataType。
其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,
除了最后一个元素an外,每一个元素有且只有一个直接后继元素。
数据元素之间的关系是一对一的关系。
4.栈和队列
栈是一种可以实现“先进后出”的存储结构,通常有出栈和压栈等操作。
队列是一种可以实现“先进先出”的存储结构,一般有入队和出队等操作。