通过查找资料,再加上我的理解,初步建立了顺序表,可以实现的功能有:查值、取值、插入、删除。
1、建立一个接口,接口中存放你所希望的顺序表所实现的功能。
public interface List1 {
//线性表接口List给出了任何实现线性表功能的类中必须要实现的成员函数原型
public int find(Object i) throws Exception;//查找
public Object getvalue(int i) throws Exception;//取值
public void insert(int i,Object value) throws Exception;//插入
public void delete(int i) throws Exception;//删除
}
2、建立一个顺序表类。
查值:查值是通过输入的一个数据,通过对顺序表的遍历得到在该顺序表中是否存在给定的数据(缺点是查找大量数据时,速度较慢)。
取值:取值是通过输入的一个在顺序表中的位置,通过对顺序表的遍历得到在该位置的值(缺点是查找大量数据时,速度较慢)。
删除:将顺序表中该位置上的数据删除(缺点是会导致顺序表有个空位,浪费空间)。
插入:插入的前提应是顺序表中有位置,若没有位置则抛出异常。
public class SequenceList implements List1 {
Object[] sList;
private int maxsize;
private int size;
//初始化
public SequenceList(Object[] obj) {
maxsize=obj.length;
sList=obj;
size=maxsize;
}
//插入
@Override//重写(覆盖)了一个方法,以实现不同的功能
public void insert(int i,Object value)throws Exception {
if(maxsize==size)
throw new Exception("顺序表已满,无法插入数据");
if(maxsize==0)
throw new Exception("顺序表为空");
if(i<0||i>=maxsize)
throw new Exception("你输入的数据错误");
Object[] middle;
middle=sList;
sList[i]=value;
for(int j=i+1;j<maxsize;j++)
{
sList[j]=middle[j-1];
}
}
//删除
@Override//重写(覆盖)了一个方法,以实现不同的功能
public void delete(int i) throws Exception{
if(maxsize==0)
throw new Exception("顺序表为空");
if(i<0||i>=maxsize)
throw new Exception("你输入的数据错误");
for(int j=i;j<maxsize;j++)
{
sList[j-1]=sList[j];
}
size--;
}
//查值
@Override//重写(覆盖)了一个方法,以实现不同的功能
public int find(Object i) throws Exception{
if(maxsize==0)
throw new Exception("顺序表为空");
int value=0;//保存查找到的位置
for(int j=0;j<maxsize;j++){
if(i.equals(sList[j])){
value=j+1;
break;
}
else
value=0;
}
return value;
}
//取值
@Override//重写(覆盖)了一个方法,以实现不同的功能
public Object getvalue(int i) throws Exception {
if(maxsize==0)
throw new Exception("顺序表为空");
if(i<0||i>=maxsize)
throw new Exception("你输入的数据错误");
Object value;//保存查找到的值
value=sList[i-1];
return value;
}
}
3、顺序表中功能的使用。
import java.util.Scanner;
//List中存放的是顺序表的接口
//SequenceList中存放的是顺序表类
//User1是顺序表的使用
public class User1 {
public static void main(String[] args) throws Exception{
System.out.print("输入表:");
Scanner sc=new Scanner(System.in);
String str;
String[] st=new String[4] ;
for(int i=0;i<4;i++) {
str=sc.nextLine();
st[i]=str;
}
sc.close();
SequenceList a=new SequenceList(st);
int len=a.sList.length;
for(int i=0;i<len;i++) {
System.out.println(i+" "+a.sList[i]);
}
System.out.println();
int jj;
//查找功能
String b="心";
int f=a.find(b);//存放查找到在顺序表中的位置
if(f==0)
System.out.println("未查找到!");
else
System.out.println("在顺序表中的位置:"+f);
System.out.println();
//取值功能
jj=2;
System.out.println("顺序表的第"+jj+"位是:"+a.getvalue(jj));//输出查找结果
System.out.println();
//删除功能
jj=2;
a.delete(jj);//删除
System.out.println("删除后的顺序表:");
for(int i=0;i<len-1;i++) {
System.out.println(i+" "+a.sList[i]);
}
System.out.println();
//插入功能
jj=3;
String value="成功了!!!";
a.insert(jj,value);
System.out.println("插入后的顺序表:");
for(int i=0;i<len;i++) {
System.out.println(i+" "+a.sList[i]);
}
}
}