线性表:具有相同数据类型的几个元素的有限序列
顺序表:线性表的顺序存储(用内存中的连续的一块存储空间存储)
特点:按数据元素的序号进行存取,存取快,增删慢
在java语言中用接口(Interface)的形式定义线性表的ADT中的公有方法。
package Chapter_3;
//用接口的形式来定义线性表的ADT中共有方法
public interface Interface<E> {
public void Init_List(int size);//初始化线性表,长度为size
public int Length_List();//求线性表的当前长度
public E Get_List(int i);//查找线性表中L中的第i个元素
public int Locate_List(E e);//查找给定元素x在线性表中的位置
public boolean Insert_List(int i,E e);//在线性表中值为e的元素作为第i个元素
public int Delete_List(int i);//删除线性表中的第i个元素
public boolean add_List(E e);
}//interface IList
顺序表作为对抽象接口的实现
package Chapter_3;
public class SeqList<T> implements Interface<T> {
private static final int MAX_SIZE = 100;// 初始化线性表的大小
private int last;// 线性表最后一个元素在数组中的位置
private T[] data;// 线性表的存储空间
// 当没有指定现线性表大小的情况下,初始化制定大小的存储空间
public SeqList() {
Init_List(MAX_SIZE);
}
// 初始化线性表
@Override
public void Init_List(int size) {
data = (T[]) new Object[size];//初始化指定大小的空间
last = -1;
}
@Override
// 获取到线性表的长度
public int Length_List() {
// TODO Auto-generated method stub
return last + 1;
}
@Override
// 获取到指定位置的元素 并返回
public T Get_List(int i) {
T e = null;
if (i < 0 || i > last + 1) {//判断位置是否合法
System.out.print("输入的参数不在合法范围内");
return null;
} else
return data[i];
}
/**
* 将指定与元素在表中的位置返回 如果存在,
* 返回元素的位置 如果不存在返回-1
*/
@Override
public int Locate_List(T e) {
int value = 0;
while (value <= last && data[value] != e)//判断钙元素是否存在
value++;
if (value > last)
return -1;
return value;
}
@Override
/**
*将指定元素插入表的指定位置
*插入成功返回true
*失败返回false
*/
public boolean Insert_List(int i, T e) {
if(last==MAX_SIZE-1){
System.out.print("表的存储空间已满,请扩展后插入");
return false;
}
if(i<0||i>last+2){
System.out.print("请插入到正确的位置");
return false;
}
for(int j=last;j>=i-1;j--){
data[j+1]=data[j];
}
data[i-1]=e;
return true;
}
/**
* 删除线性表中的第i个元素
* 删除成功返回1
* 删除不成功返回-1
*/
@Override
public int Delete_List(int i) {
if(i<1||i>last+1){
System.out.println("线性表中不存在该未知的元素");
return -1;
}
for (int j = i-1; j<=last; j++) {
data[j]=data[j+1];
}
last--;
return 1;
}
/**
*
* 添加指定元素
*/
@Override
public boolean add_List(T newData) {
data[last + 1] = newData;
last++;
return true;
}
}
测试类的实现:
package Chapter_3;
public class ArrayListTest {
public static void main(String[] args) {
SeqList<String> aList= new SeqList<String>();
aList.add_List("a");
aList.add_List("b");
aList.add_List("c");
aList.add_List("d");
System.out.println(aList.Get_List(1));
System.out.println(aList.Length_List());
System.out.println(aList.Locate_List("c"));
System.out.println(aList.Insert_List(2,"e"));
System.out.println(aList.Delete_List(3));
}
}
以上代码均本人实践所写,有任何问题,可以直接留言提问