![](https://img-blog.csdn.net/20171119214942265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTE2NDcyMzcxMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
package com.nobody.list;
/** ADT线性表接口
* 线性表的元素位置从1开始
*/
public interface ListInterface{
/** Task:往线性表的末尾插入新元素
* @param newEntry 做为新元素插入的对象
* @return 如果插入成功则返回true,否则返回false
*/
public boolean add(Object newEntry);
/** Task:往线性表的指定位置插入一个新元素,原本位于该位置及之后的元素各向后移动一个位置,线性表的大小增1.
* @param newPosition 线性表新元素插入的位置,1 <= newPosition && getLength()+1 >= newPosition
* @param newEntry 作为新元素插入的对象
* @return 如果插入成功则返回true,否则返回false
*/
public boolean add(int newPosition, Object newEntry);
/** Task:从线性表中删除指定位置的元素,原本位于该位置之后的元素各向前移动一个位置,线性表的大小减1
* @param givenPosition 删除元素的指定位置,1 <= givenPosition && getLength() >= givenPosition
* @return 如果删除成功则返回被删除的元素,否则返回 null
*/
public Object remove(int givenPosition);
/** Task: 从线性表中删除所有元素
*/
public void clear();
/** Task: 从线性表中替换指定位置的元素
* @param givenPosition 元素替换的指定位置,1 <= givenPosition && getLength() >= givenPosition
* @param newEntry 用以替换givenPosition元素的对象
* @return 如果替换成功则返回true,如果线性表为空或者givenPosition位置非法则返回false
*/
public boolean replace(int givenPosition, Object newEntry);
/** Task: 从线性表的指定位置获取元素(对象的引用)
* @param givenPosition 元素的索引位置,1 <= givenPosition && getLength() >= givenPosition
* @return 如果索引成功则返回元素,否则返回null
*/
public Object getEntry(int givenPosition);
/** Task: 判断线性表中是否含有给定的元素
* @param anEntry 表示待查元素的对象
* @return 如果线性表中存在anEntry则返回true,否则返回false
*/
public boolean contains(Object anEntry);
/** Task: 获取线性表的长度
* @return 返回线性表当前所含元素的个数
*/
public int getLength();
/** Task: 判断线性表是否为空
* @return 如果为空则返回true,否则返回false
*/
public boolean isEmpty();
/** Task: 判断线性表是否已满
* @return 如果线性表已满则返回true,否则返回false
*/
public boolean isFull();
/** Task: 按元素在线性表中的顺序,显示全部的元素
*/
public void display();
}
package com.nobody.list.imp;
import com.nobody.list.ListInterface;
/** 使用定长数组实现ADT线性表 */
public class AList implements ListInterface{
private Object[] entry; //线性表元素数组
private int length; //线性表当前元素的个数
private static final int MAX_SIZE = 50; //线性表的最大长度
public AList(){
entry = new Object[MAX_SIZE];
length = 0;
}
public AList(int maxSize){
entry = new Object[maxSize];
length = 0;
}
public boolean add(Object newEntry){ //在线性表末尾插入对象
boolean result = false;
if(!isFull()){
entry[this.length] = newEntry;
this.length++;
result = true;
}
return result;
}
public boolean add(int newPosition, Object newEntry){ //在指定位置插入对象
boolean result = false;
if(!isFull() && newPosition >= 1 && newPosition <= this.length + 1){
makeRoom(newPosition);
entry[newPosition - 1] = newEntry;
this.length++;
result = true;
}
return result;
}
public Object remove(int givenPosition){ //删除指定位置对象,并返回该对象
Object result = null;
if(givenPosition >= 1 && givenPosition <= this.length){
result = entry[givenPosition - 1];
removeGap(givenPosition);
this.length--;
}
return result;
}
public void clear(){ //清空线性表
this.length = 0;
}
public boolean replace(int givenPosition, Object newEntry){ //替换指定位置对象
boolean result = false;
if(givenPosition >= 1 && givenPosition <= this.length){
entry[givenPosition - 1] = newEntry;
result = true;
}
return result;
}
public Object getEntry(int givenPosition){ //获取指定位置对象
Object result = null;
if(givenPosition >= 1 && givenPosition <= this.length){
result = entry[givenPosition - 1];
}
return r