子类继承抽象类模板实现顺序表相关的一些基本函数
abstract class my_list{
public abstract void clear();
public abstract boolean Is_Empty();
public abstract int List_Len();
public abstract String Get_Data(int i)throws Exception;
public abstract void Insert_Data(int i, String s)throws Exception;
public abstract void Delete_data(int i)throws Exception;
public abstract int Search_data(String s);
public abstract void Display();
}
class Seqlist extends my_list {
private String[] seqlist;
private int seqlist_length;
public Seqlist(int maxsize){//类的构造方法,定义一个顺序表
seqlist_length = 0;
seqlist = new String[maxsize];
}
@Override
public void clear(){//清空顺序表
this.seqlist_length = 0;
}
@Override
public boolean Is_Empty(){//判断顺序表是否为空
if(this.seqlist_length != 0){
return false;
}
return true;
}
@Override
public int List_Len() {//获得顺序表的长度
return seqlist_length;
}
@Override
public String Get_Data(int i) throws Exception{//按照下表查找顺序表元素
if(i<0 || i > seqlist_length - 1){
throw new Exception("要找的元素不存在");
}
return seqlist[i];
}
@Override
public void Insert_Data(int i, String s)throws Exception {//将元素插入顺序表
if(seqlist_length == seqlist.length){
throw new Exception("顺序表已经满了");
}
if(i < 0 || i>seqlist_length){
throw new Exception("插入位置不合法");
}
for(int j = seqlist_length;j>i;j--){
seqlist[j-1] = seqlist[j];
}
seqlist[i] = s;
seqlist_length++;
}
@Override
public void Delete_data(int i)throws Exception {//顺序表删除元素
if(seqlist_length == 0){
throw new Exception("顺序表是空的");
}
if(i < 0 || i > seqlist_length){
throw new Exception("输入位置不合法");
}
for(int j = i;j < seqlist_length - 1;j++){
seqlist[j] = seqlist[j+1];
}
seqlist_length--;
}
@Override
public int Search_data(String s) {//查找指定元素
for(int j = 0;j < seqlist_length;j++){
if(seqlist[j].equals(s)){
return j;
}
}
return -1;
}
@Override
public void Display() {//打印顺序表
for(int i = 0;i < seqlist_length;i++){
System.out.print(seqlist[i]+" ");
}
}
}
public class Main {
public static void main(String[] args)throws Exception {
my_list new_mylist = new Seqlist(10);
new_mylist.Insert_Data(0,"a");//插入五个元素
new_mylist.Insert_Data(1,"b");
new_mylist.Insert_Data(2,"c");
new_mylist.Insert_Data(3,"d");
new_mylist.Insert_Data(4,"e");
new_mylist.Delete_data(3);//删除3号位置的元素
boolean ret = new_mylist.Is_Empty();//查看顺序表是否为空
System.out.println(ret);
String ret1 = new_mylist.Get_Data(2);//按照下标查找元素
System.out.println("2号下表对应的元素是"+ret1);
int ret2 = new_mylist.Search_data("e");//按照元素查找下标
System.out.println("e元素的下标是"+ret2);
int seqlist_Len = new_mylist.List_Len();
System.out.println("顺序表的长度是"+seqlist_Len);
new_mylist.Display();//打印顺序表
new_mylist.clear();//清空瞬息表
}
}
后续我会用Object数组和继承接口的方式加以改进。