1.接口的声明:
package class1;
public interface LinearList {
//判断线性表是否为空
public boolean isEmpty();
//返回线性表的长度
public int length();
//判断线性表是否已满
public boolean isFull();
//返回线性表中第i个元素的值
//方法前面时返回的值的类型
public Object get(int index);
//查找线性表中值为x的下标
public int LocateElem(Object x);
//向线性表中插入结点
public boolean insert (int index,Object x);
//删除线性表中下标为i的结点
public boolean delete(int index);
//遍历整个线性表
public void display();
//清空线性表
public void clear();
}
2.类的定义
package class1;
public class SequenceList implements LinearList{
private Object[] data;//线性表以数组形式存在
private int Maxsize;//表空间的最大范围
private int length;//表当前的节点个数,即表长
//构造函数
public SequenceList(int MaxSize){
if(MaxSize>0){
this.Maxsize=MaxSize;
length=0;
data=new Object[MaxSize];
}
}
//判断是否为空
public boolean isEmpty(){
return (length<=0)?true:false;
}
//判断线性表是否已满
public boolean isFull(){
return(length>=Maxsize)?true:false;
}
//返回线性表的大小
public int length(){
return length;
}
//返回线性表中第i个元素的值
public Object get(int i){
return (i<0||i>length)?null:(Object)data[i];
}
//查找线性表中值x的节点
public int LocateElem(Object x){
//查找表中值为x的结点,找到则返回该结点的序号,否则返回-1;
//若表中值为x的结点有多个,找到的是最前面一个
for(int i=0;i<length;i++){
if(data[i]==x) return i;
}
return -1;
}
//在线性表的第i个位置插入值为x的结点(下标)
public boolean insert(int i,Object x){
//在表中第i个位置插入值为x的结点
//若插入成功返回true,否则返回false
//插入位置不合理,则插入失败
if(i<0||i>length||length==Maxsize)
return false;
else{
for(int j=length;j>i;j--){
data[j]=data[j-1];
}
data[i]=x;
length++;
//表长+1
return true;
}
}
//删除线性表中的第i个结点data[i-1],若成功返回true,否则返回false;
//第i个结点不存在,删除失败
public boolean delete(int i){
if(i<0||i>length-1||length==0)
return false;
else{
for(int j=i;j<length-1;j++){
data[j]=data[j+1];
}
length--;
return true;
}
}
public void display(){
System.out.println("当前线性表的长度:"+length());
for(int i=0;i<length;i++){
System.out.println("第"+i+"个结点为:"+data[i]);
}
}
//清空线性表
public void clear(){
if(length!=0){
for(int i=0;i<length;i++){
data[i]=null;
}
length=0;
}
}
}
3.主程序
package class1;
public class li1 {
public static void main(String[] args){
SequenceList s=new SequenceList(10);
System.out.println("Is Empty?"+s.isEmpty());
System.out.println("Size:"+s.length());
s.insert(0,"Jack");
s.insert(1,"John");
System.out.println("s insert?"+s.insert(1,"John"));
s.insert(2,"Lily");
s.insert(3,"Lucy");
s.insert(4,"Lei");
System.out.println("Is Empty?"+s.isEmpty());
System.out.println("Is Full?"+s.isFull());
System.out.println("Size:"+s.length());
s.delete(2);
System.out.println("Size:"+s.length());
System.out.println(s.get(0));
System.out.println(s.LocateElem("Lei"));
s.display();
s.clear();
System.out.println("Size:"+s.length());
}
}
4.执行结果
Is Empty?true
Size:0
s insert?true
Is Empty?false
Is Full?false
Size:6
Size:5
Jack
3
当前线性表的长度:5
第0个结点为:Jack
第1个结点为:John
第2个结点为:Lucy
第3个结点为:Lei
第4个结点为:John
Size:0