資料結構之堆疊的鏈式儲存

2021-06-22 02:30:42 字數 1443 閱讀 7250

在資料結構之堆疊的順序儲存一文中,講述了堆疊的順序儲存,並指出了順序儲存的侷限性。本文講述堆疊的另一種儲存方式:鏈式儲存

堆疊的鏈式儲存(鏈棧)是鍊錶的一種表現形式,依然遵循堆疊的「先進後出」這一基本原則。鏈棧的最小單元是結點,乙個結點包含資料域和指標域兩個部分。鏈式儲存結構如下圖:

圖a:堆疊中有乙個結點,資料域為a,指標域為null,此時top指向該結點;

圖b:向鏈棧中壓入資料域為b的結點,此時堆疊中有兩個結點,資料域為a的結點為棧底,資料域為b的結點為棧頂,此時top指向棧頂;

圖c:向鏈棧中壓入資料域為c的結點,此時堆疊中有三個結點,資料域為a的結點為棧底,資料域為c的結點為棧頂,此時top指向棧頂;

圖d:從棧中彈出資料域為c的棧頂元素,並將top指向結點c的指標域指向的結點b;

圖e:從棧中彈出資料域為b的棧頂元素,並將top指向結點b的指標域指向的結點a。

按照物件導向設計的原則,鏈棧中包括兩個物件:乙個為結點物件,乙個為棧物件。

結點類如下:

public class node 

//建構函式過載

public node(object data)

public node(object data, node next)

//讀結點資料

public object getdata()

//寫結點資料

public void setdata(object data)

public node getnext()

public void setnext(node next)

}

鏈棧類如下:包含判斷鏈棧是否為空、壓入元素、彈出棧頂元素、獲取棧頂元素等操作。由於鏈棧可以根據元素數目動態分配記憶體空間,鏈棧可以看做有無窮多個空間,除非記憶體滿了。因此,在鏈棧類中並沒有定義判斷棧滿的操作。

public class linkheap 

/*** 將資料壓入鏈棧

* * @param data 壓入鏈棧的資料

*/public void push(object data)

/*** 彈出棧頂元素

* * @return 如果鏈棧為空棧,返回空值;否則返回棧頂結點的資料域

*/public object pop()

else }

/*** 獲取鏈棧的棧頂元素

* * @return 如果鏈棧為空棧,返回空值;否則返回棧頂結點的資料域

*/public object get()

}

鏈棧的操作的時間複雜度很低,上述四種方法的時間複雜度均為o(1)。

資料結構之佇列(鏈式儲存)

一 佇列結點package linkedqueue packagname linkedqueue classname linkedqueuenode date 2017 1 25 author cullianns des 鏈式儲存結點結構 public class linkedqueuenode 二...

資料結構 棧之鏈式儲存

跟鍊錶結構一樣,只是多了條限制 只能從煉表頭插入和刪除。原始碼 include include include include 棧的鏈式儲存 typedef struct data typedef struct stack 初始化空棧 void initstack stack s 判斷是否為空棧 i...

資料結構之堆疊的順序儲存

堆疊擁有兩種儲存方式 順序儲存和鏈式儲存。本文介紹堆疊了順序儲存方式。堆疊簡稱為棧,是線性表的一種特殊表現形式。堆疊只能夠在表的一端進行插入 刪除操作,允許操作的一端稱為棧頂,不允許操作的一端稱為棧底。棧的乙個一定要記住的特點是 先進後出!下圖表示了堆疊的順序儲存方式。假設用乙個長度為5的陣列a 5...