Java資料結構——線性表的順序儲存實現,java資料結構

來源:互聯網
上載者:User

Java資料結構——線性表的順序儲存實現,java資料結構
Java資料結構——線性表的順序儲存實現

一、描述 
線性結構特點: 
(1)存在唯一的一個被稱作“第一個”的資料元素 
(2)存在唯一的一個被稱作“最後一個”的資料元素 
(3)除第一個之外,集合中的每個資料元素均只有一個前驅 
(4)除最後一個之外,集合中的每個資料元素均只有一個後繼

線性表:是n個資料元素的有限序列。一般有兩種儲存結構:線性表的順序儲存結構和線性表的鏈式儲存結構。

線性表的順序表示:指的是用一組地址連續的儲存單元依次儲存線性表的資料元素。

本篇主要講線性表的順序儲存。

 

部落格撰寫人:It一zhai男 
轉載請標明地址:http://blog.csdn.net/u013293125/article/details/52926611

 

二、源碼 
2.1 SequenceList.java

package com.yds.list;import java.util.Arrays;public class SequenceList<T>{    //預設長度    private int DEFAULT_SIZE = 2;    //定義一個數組用於儲存線性表的長度    private Object[] elementData;    //用於儲存數組長度    private int capacity;    //儲存順序表中當前元素的個數    private int size = 0;    /**     * 構造一個預設長度的空線性表     */    public SequenceList(){        capacity = DEFAULT_SIZE;        elementData = new Object[capacity];    }    /**     * 用一個初始化元素來建立線性表     * @param element 初始化元素     */    public SequenceList(T element){        this();        elementData[0] = element;        size++;    }    /**     * 用一個元素和指定長度來建立線性表     * @param element 元素     * @param initSize 指定長度     */    public SequenceList(T element,int initSize){        capacity = 1;        if(capacity<initSize){            capacity = initSize +2;        }        elementData = new Object[capacity];        elementData[0] = element;        size++;    }    /**     * 向順序表中插入元素     * @param element   待插入的元素     * @param index 待插入的位置     */    public void insert(T element,int index){        if(index<0||index>size){            throw new IndexOutOfBoundsException("數組越界異常");        }        ensureCapacity(size+1);        //把index以後的元素都後移一位        System.arraycopy(elementData, index, elementData, index+1, size-index);        elementData[index] = element;         size++;    }    /**     * 表長     * @return     */    public int length(){        return size;    }    /**     * 向表中添加元素     * @param element     */    public void add(T element){        insert(element, size);    }    /**     * 得到線性表格儲存體的對象     * @param index 獲得的位置     * @return  得到的結果     */    public T get(int index){        if(index<0||index>size)            throw new IndexOutOfBoundsException("數組越界異常");        return (T)elementData[index];    }    /**     * 判斷線性表是否為空白     * @return     */    public boolean isEmpty(){        return size==0;    }    /**     * 清空線性表     */    public void clear(){        Arrays.fill(elementData, null);        size = 0;    }    /**     * 擷取指定位置的前一個元素     * @param index 線性表位置,若是取線性表最後一個元素,必須index = size,     * size為線性表元素個數     * @return      */    public T priorElem(int index){        if(index>0&&index<size+1)            return (T)elementData[index-1];        else {            throw new IndexOutOfBoundsException("數組越界異常");        }    }    /**     * 刪除指定位置的元素     * @param index     */    public void delete(int index){        if(index<0||index>size-1){            throw new IndexOutOfBoundsException("數組越界異常");        }else{            //把數組前移一位            System.arraycopy(elementData, index+1, elementData, index, size-index-1);            size--;            //清空最後一個元素            elementData[size]=null;        }    }    /**     * 擷取指定線性表位置的後一個元素     * @param index 線性表位置,若是取線性表第0個元素,必須index=-1     * @return     */    public T nextElem(int index){        if (index==-1) {            return (T)elementData[0];        }        else if (index<size-1&&index>-1) {            return (T)elementData[index+1];        }else{            throw new IndexOutOfBoundsException("數組越界異常");        }    }    /**     * 確保數組所需長度大於數組原有長度     * @param mCapacity 數組所需長度     */    private void ensureCapacity(int mCapacity){        if(mCapacity>capacity){            capacity=mCapacity+2;//          System.out.println("capacity:"+capacity);            elementData = Arrays.copyOf(elementData, capacity);        }    }}   

2.2 JavaMain.java

package com.yds.list;public class JavaMain {    public static void main(String[] args) {        // TODO Auto-generated method stub        SequenceList<String> list = new SequenceList<String>();                System.out.println("isEmpty:"+list.isEmpty());        String La[] = {                "3"        };        for (int i = 0; i < La.length; i++) {            list.add(La[i]);        }        System.out.println("isEmpty:"+list.isEmpty());                for (int i = 0; i < La.length; i++) {            System.out.println(list.get(i));        }        System.out.println("length:"+list.length());        System.out.println("priorElem:"+list.priorElem(1));        list.insert("7", 0);        System.out.println("--------------------");        for (int i = 0; i < list.length(); i++) {            System.out.println(list.get(i));        }        System.out.println("length:"+list.length());        System.out.println("--------------------");        System.out.println("priorElem:"+list.priorElem(1));        System.out.println("nextElem:"+list.nextElem(0));                System.out.println("--------------------");        list.delete(1);        for (int i = 0; i < list.length(); i++) {            System.out.println(list.get(i));        }        list.clear();        System.out.println("isEmpty:"+list.isEmpty());        System.out.println("----------SequenceList(T element)----------");                SequenceList<String> list1 = new SequenceList<String>("5");        for (int i = 0; i < La.length; i++) {            list1.add(La[i]);        }        for (int i = 0; i < list1.length(); i++) {            System.out.println(list1.get(i));        }        System.out.println("-------SequenceList(T element,int initSize)--------");        SequenceList<String> list2 = new SequenceList<String>("5",3);        for (int i = 0; i < La.length; i++) {            list2.add(La[i]);        }        for (int i = 0; i < list2.length(); i++) {            System.out.println(list2.get(i));        }    }}

3 結果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.