資料結構(八) 棧的鏈式儲存結構及實現

2022-07-18 21:48:19 字數 1316 閱讀 6022

上一節我們說了順序棧,這節我們說鏈棧,那麼什麼是鏈棧呢?通常的理解是棧的鏈式儲存結構,簡稱為鏈棧

在鏈棧中,棧頂放在單鏈表的頭部。另外,都已經有了棧頂在頭部了,單鏈表中比較常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭結點的。結構如圖所示:

對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒有可以使用的空間,如果真的發生,那此時的計算機作業系統已經面臨宕機崩潰的情況,而不是這鏈棧是否溢位的問題。

但對於空棧來說,鍊錶原定義是頭指標指向空, 那麼鏈棧的空其實就是 top=null 的時候。

以下是鏈棧的實現,**如下:

public class linkstack

} private node top;// 存放棧頂節點

private int size = 0;// 存放棧中已有的元素個數

// 建立空鏈棧

public linkstack()

// 已指定資料元素建立鏈棧,只有乙個元素

public linkstack(t element)

// 返回鏈棧的長度

public int length()

// 進棧

public void push(t elemnt)

// 出棧

public t pop()

node oldtop = top;

// 讓top指向原棧頂的下乙個節點

top = top.next;

// 釋放原棧頂元素的引用

oldtop.next = null;

size--;

return oldtop.data;

} // 獲取棧頂元素

public t gettop()

return top.data;

} // 判斷是否為空

public boolean isempty()

// 清空棧

public void clear()

}

對比一下順序棧與鏈棧,它們在時間複雜度上是一樣的,均為o(1)。對於空間效能, 順序棧需要事先確定乙個固定的長度,可能會存在記憶體空間浪費的問題,但它的優勢是訪問時定位很方便,而鏈棧則要求每個元素都有指標域,這同時也增加了一些記憶體開銷,但對於棧的長度無限制。所以它們的區別和線性表中討論的一樣, 如果棧的使用過程中元素變化不可預料,有時很小,有時非常大,那麼最好是用鏈棧,反之,如果它的變化在可控範圍內,建議使用順序棧會更好一些。

資料結構 棧 棧的鏈式儲存結構

資料結構 棧 棧的鏈式儲存結構 用頭插法建立的鏈棧,棧頂元素為s next所指結點 date 2017 4 14 include include define initsize 100 define elemtype char typedef struct lnode linkstack void ...

《資料結構 棧》鏈式儲存

一 鏈式儲存 和 順序結構 對比?棧的 順序結構 與 鏈結構,他們在時間複雜度上都一樣,都為o 1 如果棧的數量可預知,則使用順序棧,否則,則使用鏈棧 鏈棧 要求每個元素都有指標域,增加了記憶體開銷,但對於長度無限制。二 棧 鏈式結構 棧的 順序結構 與 鏈結構,他們在時間複雜度上都一樣,都為o 1...

資料結構 棧的鏈式儲存

目標效果 stack.h頁面 ifndef stack h included define stack h included ifndef elemtype define elemtype int 資料元素型別預設為 int define elemtype tag endif 鏈棧的儲存結構定義 t...