线性表基本概念
线性表是其组成元素间具有线性关系的一种线性结构,是由n个数据类型相同的元素构成的有限序列。其具有“一对一”的逻辑关系,与位置有关,除了头尾元素之外,每一个元素都有唯一的前驱元素和后继元素,即元素ai前面的元素为ai-1,后面的元素为ai+1。
抽象数据类型
线性表的抽象数据类型可以用接口描述,其中列举了一些基本的功能,可以自己根据需求扩充:
package ch02;
public interface IList {
public void insert(int index,Object data) throws Exception; //在指定位置插入元素
public void clear(); //清空线性表
public void remove(int index); //删除指定位置元素
public boolean isEmpty(); //判断线性表是否为空
public Object get(int index); //获取指定位置元素
public int length(); //获取线性表长度
public int indexOf(Object data); //获取指定元素的角标
public void display(); //输出线性表中所有元素
}
线性表的存储结构和实现
顺序存储结构——顺序表
线性表的顺序存储结构,是把线性表中的所有元素按照其逻辑顺序,依次存储到计算机在内存中指定的一块连续存储空间中,成为顺序表。
元素在内存中的物理存储位置和他们在线性表中的逻辑位置一致。
特点
- 在线性表中逻辑上相邻的元素在物理存储位置上也相邻;
- 可按照数据元素的索引号进行随机存取,时间复杂度为O(1);
- 插入、删除操作需要移动大量的元素,时间复杂度为O(n);
- 需要预先分配存储空间,可能会造成空间浪费,但存储密度高,数据紧凑。
描述
常使用数组作为顺序表的底层数据结构进行存储。
package ch02;
public class SqList implements IList {
private Object[] listItem; //顺序表的存储空间大小;
private int curLen; //顺序表的当前长度
private int maxSize; //顺序表的最大尺寸
//构造最大尺寸为maxSize的顺序表
SqList(int maxSize){
this.maxSize = maxSize;
this.curLen = 0;
this.listItem &#