顺序表的实现是用固定长度的数组来存储表中的元素。
package ArrayBasedList;
/*顺序表:基于数组实线性表*/
public class ArrayBasedList implements List{
private static final int defaultSize = 10; //长度缺省值
private int maxOfList; //线性表的最大长度
private int numOfList; //线性表的实际长度
private int current; //当前的对象的位置
private Object[] listArray; //储存线性表元素的数组
ArrayBasedList(){ //无参数初始化
setUp(defaultSize);
}
ArrayBasedList(int sz){ //自定义最大常数长度的初始化
setUp(sz);
}
private void setUp(int size){ //参数的初始化
maxOfList = size;
numOfList = current = 0;
listArray = new Object[size];
}
public void clear(){ //从当前线性表中移除所有对象
numOfList = current = 0; //简单地将值初始化
}
public void insert(Object item){ //在当前位置插入对象
assert numOfList < maxOfList : "列表已满."; //断言判断
assert (current >= 0) && (current <= numOfList): "错误的当前位置.";
for(int i=numOfList; i>current; i--){ //对象转移腾出空间
listArray[i] = listArray[i-1];
}
listArray[current] = item;
numOfList++;
}
public void append(Object item){ //从列表结尾增加对象
assert numOfList < maxOfList: "列表已满.";
listArray[numOfList++] = item;
}
public Object remove(){ //移除并返回当前对象
assert (!isEmpty()) : "无法删除一个空列表.";
assert (isInList()) : "没有当前元素";
Object item = listArray[current];
for(int i = current; i < numOfList-1; i++){
listArray[i] = listArray[i+1];
}
numOfList--;
return item;
}
public void removeAll(){ //移除所有元素
numOfList = current = 0;
}
public void setFirst(){ //设置当前位置为第一个位置
current = 0;
}
public void previous(){ //设置当前位置移动到上一位置
current--;
}
public void next(){ //设置当前位置移动到下一位置
current++;
}
public int length(){ //返回当前列表的长度
return numOfList;
}
public void setPosition(int pos){ //设置当前位置为pos
current = pos;
}
public void setValue(Object val){ //设置当前位置对象的值
assert isInList() : "没有当前元素.";
listArray[current] = val;
}
public Object currentValue(){ //返回当前对象的值
assert isInList() : "没有当前元素.";
return listArray[current];
}
public boolean isEmpty(){ //如果当前线性表为空,返回真
return numOfList == 0;
}
public boolean isInList(){ //如果当前位置确实指向表中的一个位置,则返回真
return (current >= 0)&&(current < numOfList);
}
public void print(){ //输出当前线性表的所有元素
if(isEmpty()){
System.out.println("()");
}else{
System.out.print("(");
for(setFirst(); isInList(); next()){
System.out.print(currentValue()+ " ");
}
System.out.println(")");
}
}
}//class ArrayBasedList