线性表的存储结构
线性表:零个或多个数据元素的有限序列。
元素 - 线性表中每一个节点包含一个元素。
索引:表中的每一个元素都有一个确定的位置,称为元素的索引。
在jdk中其实已经有提供线性表的实现——ArrayList,现在我们来自己实现一个ArrayList.
首先定义一个元素类Elem
public class Elem { public int id; public String name; public String toString() { return "[" + id + "," + name + "]"; } }
一个表应该有的基本操作(为防止和jdk冲突,表名前加了个前缀):
public interface ZList { //向表中添加一个元素 void add(Elem e); //删除表中位于position处的元素 void delete(int position); //返回表中位于position处的元素 void get(Elem e); //获取表中元素的数量 int length(); }
作为线性表,内部的元素结构我们可以采用数组来实现:
private Elem[] datas; private final int maxLength; private int length; public ArrayList(int maxLength) { this.maxLength = maxLength; datas = new Elem[maxLength]; }
线性表的插入
好了,目前为止,线性表的基本存储结构已经完成,我们来看线性表的插入操作。
将元素插入第i个元素的前面,所有第i个之后的元素都需要向后移动一个单元。
public void insert(Elem e, int index) { if (length < maxLength && index <= length) { //表有上限 for (int i = length; i > index; i--) { datas[i] = datas[i - 1]; } datas[index] = e; length++; } else { LogUtil.d(TAG, "ArrayList is full, can not insert"); } }
线性表的删除
删除第i个元素,所有第i个的后续元素都需要向前移动一个单元。
public void delete(int index) { if (index < length) { for (int i = index; i < length - 1; i++) { datas[i] = datas[i + 1]; } datas[length - 1] = null; length--; } else { LogUtil.d(TAG, "ArrayList is empty, can not delete"); } }
好了,现在线性表的基本操作方法就做完了,至于get方法,直接返回数组对应的游标即可。