動手實現資料結構 陣列 鍊錶 佇列 雜湊表

2021-09-25 22:42:05 字數 2904 閱讀 9598

最近各種筆試、面試**,歸結起來,打鐵還需自身硬,想攬瓷器活,就得有金剛鑽。任何各種投機取巧、僥倖心理都是沒意義的。出來混,欠的總是要還的!在學習上,必須死磕到底。

實現陣列擴容、插入、刪除、輸出的功能。

public class myarray 

/*** 陣列插入元素

* @param element 插入的元素

* @param index 插入的位置

* @throws exception

*/public void insert(int element,int index) throws exception

//if(size >= array.length)

//從右向左迴圈,將元素逐個向右挪1位

for(int i=size-1;i>=index;i--)

//騰出的位置放入新元素

array[index] = element;

size++; }

/*** 陣列刪除元素

* @param index 刪除元素的位置

* @return

*/public int delete(int index) throws exception

//將要刪除的元素快取,在下一步返回

int deleteelement = array[index];

//從左向右迴圈,將元素逐個向左挪1位

for(int i=index;i實現:

主要思想是將資料用node包裝,然後node這種形式更加健壯和全面,不僅包含有data資料,還有指向下乙個資料的指標,乙個接乙個,最後構成鍊錶這種資料結構,實現鍊錶這種功能。

每次新增的雖然是資料,乙個int資料,但如果僅僅新增int資料的話,肯定是不行的,無法實現鍊錶的特性。所以,每新增乙個資料,都必須new乙個新節點,通過節點物件的data變數儲存資料,然後指向下乙個node的指標next來確定node的邏輯關係。

個人的理解是:鍊錶是一種設計和思想,但最終的實現是根據不同語言的特性來實現的,大同小異。

public class mylinkedlist

//要保證以鍊錶的形式進行,雖然主要插入和操作的是資料data,但為了鍊錶這種資料結構的方便性,還要套一層node的殼,所以所有的資料都是以node的形式儲存

//當插入資料的時候,必須先建立新的物件,將資料放到物件中去。

node insertednode = new node(data);

if(size == 0) else if(index == 0) else if(index == size) else

size++; }

/*** 鍊錶刪除元素

* @param index 刪除的位置

* @return

* @throws exception

*/public node remove(int index) throws exception

//刪除的節點,需要將此節點返回,先將其初始化為null,確定最後要刪除那個節點,將此節點賦值給removenode,作為函式的返回值

node removenode = null;

if(index == 0) else if(index == size) else

size--;

return removenode;

}/**

* 鍊錶查詢元素

* @param index 查詢的位置

* @return

* @throws exception

*/private node get(int index) throws exception

node temp = head;

for(int i=0;i大多數資料結構都是以陣列或鍊錶作為儲存方式。陣列和鍊錶可以被看作資料儲存的「物理結構」。

線性結構

非線性結構

邏輯結構

順序表、棧、佇列

樹、圖物理結構

陣列鍊錶

兩者都屬於邏輯結構,它們的物理實現既可以利用陣列,也可以利用鍊錶來完成。

public class myqueue

/*** 入隊

* @param element 入隊的元素

* @throws exception

*/public void enqueue(int element) throws exception

array[rear] = element;

rear = (rear+1)%array.length; }

/*** 出隊

* @return

* @throws exception

*/public int dequeue() throws exception

int dequeueelement = array[front];

front = (front+1)%array.length;

return dequeueelement; }

/*** 輸出佇列

*/public void output() }

public static void main(string args) throws exception

}

但是由於陣列的長度是有限的,當插入的entry越來來越多時,不同的key通過雜湊函式獲得的下標都可能是相同的。這種情況,叫作雜湊衝突。解決雜湊衝突的方法主要有兩種:

開放定址法:threadlocal採用

鍊錶法:hashmap應用

對於jdk中雜湊表實現類hashmap來說,影響其擴容的因素有兩個。

雜湊表的擴容經過兩個步驟:

擴容,建立乙個新的entry空陣列,長度是原陣列的2倍。

重新hash,遍歷原entry陣列,把所有的entry重新hash到新陣列中。

資料結構 佇列的實現 陣列 鍊錶

一種先進先出的資料結構 基本操作 實現 以陣列實現 public class arrayqueue public arrayqueue int size 入隊 public boolean inqueue int num this head 1 重置隊頭 this tail this count 1...

資料結構 佇列,陣列實現 鍊錶實現和迴圈佇列

一 什麼是佇列 一種先進先出的資料結構 fifo結構 新元素新增在隊尾 push 刪除操作刪掉第乙個元素 pop 二 佇列的實現方式 佇列的實現方式陣列實現 鍊錶實現 三 常見的佇列 常用佇列迴圈佇列 阻塞佇列 併發佇列 四 怎麼實現乙個無bug的佇列思考 思考1 head 頭元素 和tail 尾元...

鍊錶實現佇列 資料結構作業

仿照作業code1的功能,將課本上鍊表的實現佇列能完整實現 需要通過main函式呼叫並能進行友好的人機互動輸入 作業code1 鍊錶實現佇列的 include define ok 1 define error 0 using namespace std typedef int qelemtype t...