上一節我們說了順序棧,這節我們說鏈棧,那麼什麼是鏈棧呢?通常的理解是棧的鏈式儲存結構,簡稱為鏈棧。
在鏈棧中,棧頂放在單鏈表的頭部。另外,都已經有了棧頂在頭部了,單鏈表中比較常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭結點的。結構如圖所示:
對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒有可以使用的空間,如果真的發生,那此時的計算機作業系統已經面臨宕機崩潰的情況,而不是這鏈棧是否溢位的問題。
但對於空棧來說,鍊錶原定義是頭指標指向空, 那麼鏈棧的空其實就是 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...