1. 程式人生 > >Java線性表(順序儲存)——陣列實現

Java線性表(順序儲存)——陣列實現

第一次寫部落格,最近一直在研究資料結構,最開始準備用c語言寫資料資料結構的東西的,發現用c真的寫得我頭痛,果斷用了我喜歡的java實現,其實懂了過後用什麼語言寫都一樣的。不說了,直接上程式碼!

1.定義介面

抽象資料型別的List介面

public interface List {          //返回線性表的大小,即資料元素的個數     public int getSize();          //判斷線性表是否為空     public boolean isEmploy();          //判斷線性表是否包含元素e     public boolean contains(Object se);          //返回資料元素e線上性表中的序號,若不存在返回-1

    public int indexOf(Object e);          //將資料元素e插入到線性表的i個位置,越界則報錯     public void insert(int i,Object e) throws OutOfBoundaryException;          //將資料元素e插入到元素obj之前     public boolean insertBefor(Object obj,Object e);          //將資料元素插入到元素obj之後     public boolean insertAfter(Object obj,Object e);          //刪除線性表中序號為i的元素,成功則返回這個元素,i越界報錯
    public Object remove(int i) throws OutOfBoundaryException;          //刪除線性表中第一個與元素e相同的元素,成功true ,失敗flase     public boolean remove(Object e);          //替換線性表中序號為i的元素e,成功則返回原資料,i越界報錯     public Object replace(int i,Object e) throws OutOfBoundaryException;          //返回線性表中序號為i的元素,i越界報錯     public Object get(int i) throws OutOfBoundaryException; }  

2.定義異常

出現越界發生該異常

public class OutOfBoundaryException extends RuntimeException{

    public OutOfBoundaryException(String err){         super(err);     } }

3.用陣列實現

public class ListArray implements List {

    // 陣列預設大小     private final int LEN = 8;

    // 陣列元素的比較策略(沒用上,用的系統的比較方法)     // private Strategy strategy;

    // 線性表中元素的個數     private int size;

    // 資料元素陣列     private Object[] elements;

    public ListArray() {     }

    public ListArray(int size) {         // this.strategy = strategy;         this.size = size;         elements = new Object[LEN];     }

    /*      * 返回線性表大小      */     public int getSize() {         return size;     }

    /*      * 判斷線性表是否為空      */     public boolean isEmploy() {         return size == 0;     }

    /*      * 判斷線性表是否包含元素e      */     public boolean contains(Object e) {         for (int i = 0; i < size; i++) {             if (e.equals(elements[i]))                 return true;         }         return false;     }

    /*      * 返回元素e線上性表中的序號      */     public int indexOf(Object e) {         for (int i = 0; i < size; i++)             if (e.equals(elements[i]))                 return i;         return -1;     }

    /*      * 線上性表的i個序號位置插入元素e      */     public void insert(int i, Object e) throws OutOfBoundaryException {         if (i < 0 || i > size)             throw new OutOfBoundaryException("越界異常");         if (size >= elements.length)             expandSpace();// 表滿了,擴容兩倍         for (int j = size; j > i; j--)             elements[j] = elements[j - 1];         elements[i] = e;         size++;         return;     }

    /*      * 陣列擴容兩倍      */     public void expandSpace() {         Object[] a = new Object[elements.length * 2];         for (int i = 0; i < elements.length; i++)             a[i] = elements[i];         elements = a;     }

    /*      * 將資料e插入到元素obj之前      */     public boolean insertBefor(Object obj, Object e) {         int i = indexOf(obj);         System.out.println(i);         if (i < 0)             return false;         insert(i, e);         return true;     }

    /*      * 將資料e插入到元素obj之後      */     public boolean insertAfter(Object obj, Object e) {         int i = indexOf(obj);         if (i < 0)             return false;         insert(i + 1, e);         return true;     }

    /*      * 刪除序號為i的那個元素      */     public Object remove(int i) throws OutOfBoundaryException {         if (i < 0 || i > size) {             throw new OutOfBoundaryException("輸入的數越界");         }         Object obj = elements[i];         for (int j = i; j < size - 1; j++)             elements[j] = elements[j + 1];         // elements[--size] = null;//?我用size--替換         size--;         return obj;     }

    /*      * 刪除線性表第一個與e相同的元素      */     public boolean remove(Object e) {         int i = indexOf(e);         if (i < 0)             return false;         remove(i);         return true;     }

    /*      * 替換序號為i的元素e      */     public Object replace(int i, Object e) throws OutOfBoundaryException {         if (i < 0 || i > size)             throw new OutOfBoundaryException("輸入越界");         Object obj = elements[i];         elements[i] = e;         return obj;     }

    /*      * 返回序列號為i的元素      */     public Object get(int i) throws OutOfBoundaryException {         if (i < 0 || i > size)             throw new OutOfBoundaryException("陣列越界");         return elements[i];     }

}

這裡我沒有寫理論知識,我覺得寫太多的文字大家也不會去太仔細的閱讀,如果需要請留言給我!