1、定义
线性表是n(n>=0)个具有相同数据类型的元素的有序序列。线性表可逻辑的表示为:
(a1,a2,...,an−1,an)
其中,n表示线性表的长度。当n=0是,表示线性表为空表。线性表的具体含义在不同情况下不同,同一线性表中各元素的类型必须相同,通常抽象地记为Elementtype。
线性表是一种最常用的数据结构,在java中对应于List集合。
2、线性表常用操作
- 清空线性表
- 求线性表长度
- 查询指定元素e(不存在返回-1)
- 得到线性表第n个元素
- 在第i个元素前(后)插入元素e
- 删除第i个元素
3、线性表存储结构
3.1 数组
使用数组结构存储线性表,在内存单元中使用连续的内存保存线性表,其中size代表线性表的当前长度。如图:
数组型线性表在内存中是连续存储的,所以我们得一次性申请一块连续的空间,这就有可能造成空间的浪费。
3.2 链表
使用链表存储线性表,不需要申请连续的空间,但是每个元素需要申请额外的空间来保存指向下一个元素的指针。如图:
链表型的线性表不需要提前申请额外的空间只需要在需要的时候动态的申请所需空间即可。
4、两种特殊的线性表(栈和队列)
4.1 栈
栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作。通常我们将允许进行插入和删除的一端称为栈顶,不可以进行插入和删除的一端称为栈底。向栈顶插入一个元素一般称为入栈操作,从栈顶删除一个元素称为出栈操作。当表中没有元素时,我们将之称为空栈。
栈的常用操作
- 判断栈是否空栈
- 向栈顶插入一个元素即入栈操作(push)
- 从栈顶取一个元素即出栈操作(pop)
- 读栈顶元素(peek)
4.2 队列
队列也是一种特殊的线性表,不同的是在这种线性表中,删除运算限定在表的一端进行,而插入操作限定在标的另外一端进行。我们将允许插入操作的一端称为队尾,允许删除操作的一端称为队首。向队尾插入元素称为入队,从队首删除元素称为出对。
队列的常用操作
- 判断队列是否空
- 向队尾插入一个元素即入队操作
- 从队首删除一个元素即出对操作
- 读队首元素(peek)
5、数组和链表存储结构的比较
这里使用一个表格来列举数组型线性表和链表型线性表的主要区别。