线性表的存储结构
线性表:零个或多个数据元素的有限序列。
元素 - 线性表中每一个节点包含一个元素。
索引:表中的每一个元素都有一个确定的位置,称为元素的索引。
在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方法,直接返回数组对应的游标即可。