線性表——順序實現java
阿新 • • 發佈:2019-02-08
package linelist; //線性表的順序實現方式 泛型指的是該線性順序表中儲存的資料型別 public class ArrayList<T> { //設定線性表的預設長度 final int defaultSize =0; //線性表的最大長度 int maxSize; //線性表的當前長度 int length; //儲存線性表的陣列 Object [] arryList; /* * 建構函式 * @param 構建順序表的時候需要把線性表的長度作為引數傳遞進來 */ public ArrayList (int size) { //初始化線性表 initList(size); } /* * 初始化順序表的方法 * @param size 指定需要建立的順序表的長度 */ public void initList(int size) { if (size<0) { //當傳遞過來的線性表長度小於0的時候丟擲異常 throw new RuntimeException("順序表的長度不能小於0"); }else { this.maxSize =size; this.length =0; this.arryList =new Object[size]; } } /* * 獲取表長的方法 */ public int getLength() { int num=0; for (int i = 0; i < maxSize; i++) { if(arryList[i]!=null) { num++; } } return num; } /* * 按值查詢 * 返回元素在順序表中的下標 */ public int getIndexByValue(Object e) { for (int i = 0; i < getLength(); i++) { if(e==arryList[i]) { return i; } } //如果該元素不存在則返回-1 return -1; } /* * 查詢指定下標位置下的元素值 */ public Object getValueByIndex(int i) { if(i<maxSize&&i>=0) { return arryList[i]; }else { //如果輸入下標小於0或者不小於線性表的最大長度則丟擲異常 throw new RuntimeException("輸入下標有誤"); } } /* * 在指定下標位置插入元素 */ public void insertByIndex(int index,Object elem) { Object preTemp,reTemp; if(index>=0&&index<this.getLength()+1) { if(this.getLength()+1<maxSize) { //要插入位置上原來的資料 preTemp =arryList[index]; //插入目標值 arryList[index]=elem; //插入位置之後的值集體後移一位 for(int i=index+1;i<=this.getLength();i++) { //下面這三行實現前後兩個位置數的交換 reTemp=arryList[i]; arryList[i]=preTemp; preTemp =reTemp; } }else { throw new RuntimeException("順序表中元素已滿,不能再進行插入!"); } }else { throw new RuntimeException("輸入的順序表下標不對"); } } /* * 刪除指定位置上資料 * */ public void deleteByIndex(int index) { if(index>=0&&index<this.getLength()) { for (int i = index; i < arryList.length-1; i++) { arryList[i]=arryList[i+1]; } }else { throw new RuntimeException("輸入的下標有誤!"); } } /* * 修改指定位置的元素為指定資料 */ public void updateElemByIndex(int index,Object elem) { if (index>=0&&index<this.getLength()) { arryList[index]=elem; }else { throw new RuntimeException("輸入下標有誤!"); } } /* * 判空 */ public boolean isEmpty() { return (getLength()==0)?true:false; } /* * 刪除順序表 */ public void destroyList() { this.length=0; this.maxSize =0; this.arryList =null; } //空表的簡單初始化 public void init(Object...objects) { if(isEmpty()) { for(int i=0;i<objects.length;i++) { arryList[i]=objects[i]; } }else { throw new RuntimeException("非空表不能使用這種初始化方法"); } } }