Java數據結構與算法 順序表的實現

線性表:具有相同數據類型的幾個元素的有限序列

順序表:線性表的順序存儲(用內存中的連續的一塊存儲空間存儲)

特點:按數據元素的序號進行存取,存取快,增刪慢


在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));
	}
}

以上代碼均本人實踐所寫,有任何問題,可以直接留言提問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章