Java資料結構與演算法之順序表的實現

2021-09-19 23:26:50 字數 2755 閱讀 9298

一、前言

先簡單回顧下陣列的特點:陣列是一種線性表資料結構,是一組連續的記憶體空間(這也是隨機訪問的重要切入點),儲存的資料型別相同。(

下面來看乙個介面mylist,介面中包含了容器類的大部分方法,包括增刪改查的方法也就是我們自己手寫的手寫的myarraylist的頂級介面。

package cn.com.arraylist;

/** * 順序表頂級介面

* @author administrator

*/public inte***ce mylist

首先實現介面先實現介面mylist,從寫介面中的方法,宣告當前陣列,當前陣列大小及預設陣列的長度大小為10。

//當前陣列

private object table;

//當前陣列長度

private int size;

//預設陣列長度

public final static int defult_lentht=10;

此處宣告兩個構造方法,乙個指定資料的長度,乙個預設無參構造方法,而無參構造方法調指定預設陣列長度大小為10;

/**

*指定容器大小

* @param capacity

*/public myarraylist(int capacity)

/*** 無參構造方法,設定預設大小10

*/public myarraylist()

來先看下幾個簡單的方法

判斷是容器是否為空,只需判斷當前陣列的長度是否為0;

/**

* 判斷是否為空,判斷當前容器大小是否為0

*/@override

public boolean isempty()

獲得元素在容器的中的位置:由於容器本身是個陣列,所有元素的位置也就是元素在陣列中的下標,而確定元素的下標需要遍歷所有元素從而找到元素的下標位置。

/**

* 根據下標定址,預設返回-1,表示該元素在容器中不存在

*/@override

public int indexof(t data)

}} return -1;

}

判斷元素最後一次出現的位置:與indexof的方法相似,只是遍歷的順序會和indexof相反(**就省略了)

容器指定位置新增元素:因為陣列的連續性,在未指定條件的情況,新加入順序表的元素都會放入的陣列的末端。當陣列長度無法滿足當前新增元素時,觸發容器的動態擴容機制。

@override

public void add(int index, t data)

//動態擴容

ensurecapacity(index);

// 插入新值

this.table[index] = data;

// 長度加1

size++;

return true;

}/**

* 判斷資料是否需要擴容,當容器大小與陣列的大於等於陣列大小時,

* 將原來的資料擴容到之前的2倍,並且搬移陣列到新陣列中

* @param index

*/public void ensurecapacity(int index)

} //index後面的元素向後移動一位

for (int j = size; j > index; j--)

}

指定位置新增元素時,預設在容器末尾新增元素:

/**

* 在尾部插入元素

*/@override

public boolean add(t data)

獲取指定位置的元素:由於順序表的底層是由陣列實現,所以根據陣列下標獲取元素值,如果邊界不合法返回null

/**

* 獲取元素(根據陣列下標獲取元素)

*/@override

public t get(int index)

// 末尾的元素設定為null

this.table[size - 1] = null;

// 順序表長度-1

--size;

return true;}}

} return false;

}

修改某個元素的值:校驗邊界合法性,根據下標獲取該元素,用新元素替換舊元素

/**

* 設定某個節點的值返回舊的節點

*/@override

public t set(int index, t data)

return null;

}

以上就是順序表最基本的增刪改查方法,從上面的方法中,可以看出,順序表結構在增刪情況下由於要涉及資料搬移效率要明顯低於讀寫,不過在已經資料較少同時對於效能不敏感的情況下,順序表基本能滿足需求,譬如arraylist在我們實際系統中應用是比較廣泛的。

資料結構與演算法之順序表

include include define maxsize 100 typedef char elemtype typedef struct list sqlist void createlist sqlist l,elemtype a,int n 建立順序表 void initlist sqli...

java資料結構之順序表

1.順序表中按位置隨機訪問的時間複雜度為o 1 2.順序表中的在給定位置插入或者刪除需要移動差不多一半的以上的元素,所以時間複雜度為o n 3.儲存密度 資料占用的儲存量 整個結點占用的儲存量。根據這個公式可以得出順序表的儲存密度為1 所以可以得出以下結論 線性表一般作為查詢頻繁,插入或者刪除比較少...

資料結構與演算法 順序表

python中的list和tuple兩種型別採用了順序表的實現技術,具有前面討論的順序表的所有性質。tuple是不可變型別,即不變的順序表,因此不支援改變其內部狀態的任何操作,而其他方面,則與list的性質類似。python標準型別list就是一種元素個數可變的線性表,可以加入和刪除元素,並在各種操...