目录
线性表
线性表(List):零个或多个数据元素的有限序列。
线性表顾名思义就是像线一样的表,每个节点都具有唯一一个前驱元素和后继元素(除了第一个节点没有前驱,后一个节点没有后继)。常见的线性表:顺序表、链表、栈、队列..
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
如下图所示就是一个非常简单的线性表。具体来说线性表一般要满足三个条件:
- 是一个序列。每个节点都具有唯一一个前驱元素和后继元素(除了第一个节点没有前驱,后一个节点没有后继)
- 有限的。再牛逼的计算机也得处理有限的数据不是。
- 每个元素都是具有相同的数据类型的数据。
线性表的顺序储存结构
线性表的顺序储存结构,指的是用一段地址连续的存储单元依次储存线性表的数据元素。因此在计算机中可以用一维数组来实现该顺序储存结构。
来看线性表的顺序存储的结构代码:
public class MyArrayList {
public int[] elem;
public int usedsize; //线性表的长度,即存放了多少个有效的数字
public static final int DEFAULTSIZE = 5;
public MyArrayList(){
this.elem = new int[DEFAULTSIZE];
}
这里,我们就发现描述顺序储存结构需要三个属性:
- 储存空间的起始位置:数组elem下标元素0的位置即整个线性表的起始位置。
- 线性表的最大储存长度:这里定义了一个常量DEFAULTSIZE,来指定线性表的最大储存长度为5
- 线性表的当前长度:即线性表当前存放了多少个有效的数字。这里用usedSize
线性表顺序存储结构的优缺点
优点:
- 无须为表示表中元素之 间的逻辑关系而增加额外的存储空间
- 可以快速地存取表中任一位置的元素
缺点:
- 插入和删除操作需要移动大量元素
- 当线性表长度变化较大时,难以确定存储空间的容量
- 造成存储空间的"碎片"
顺序储存结构的操作(JAVA自实现)
下面笔者用java实现了顺序储存结构的几种常见的操作。