在資料結構之堆疊的順序儲存一文中,講述了堆疊的順序儲存,並指出了順序儲存的侷限性。本文講述堆疊的另一種儲存方式:鏈式儲存。
堆疊的鏈式儲存(鏈棧)是鍊錶的一種表現形式,依然遵循堆疊的「先進後出」這一基本原則。鏈棧的最小單元是結點,乙個結點包含資料域和指標域兩個部分。鏈式儲存結構如下圖:
圖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...