資料結構 鏈式棧 Linked stack

2021-08-27 02:19:28 字數 2629 閱讀 8205

08年9月入學,12年7月畢業,結束了我在軟體學院愉快豐富的大學生活。此系列是對四年專業課程學習的回顧,索引參見:

棧是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底(push),最後的資料在棧頂(top),需要讀資料的時候從棧頂開始彈出資料(top)最後乙個資料被第乙個讀出來。

鏈式棧中的元素以node的形式儲存,節點node中存有此節點存於棧中的元素以及指向下個節點的指標。鏈式棧的資料成員只用儲存指向棧頂節點的指標 *top_node.

因為指標的運用,鏈式棧在實現時尤其重要的一點就是編寫自己的析構函式,拷貝建構函式和過載賦值運算子。

我選擇的題目是測試鏈式棧的各種功能

1.鏈式棧中元素以節點形式儲存,首先編寫結構node的定義和實現。

2.編寫棧的定義和實現。棧中資料成員是指向棧頂的指標*top_node。成員函式是實現棧最基本的操作——push()向棧中加入元素,pop()移出棧頂元素,top()得到棧頂元素,empty()判斷棧是否為空。

3.編寫鏈式棧的析構函式~stack(),拷貝建構函式stack(const stack &original),過載賦值運算子operator=(const stack &original);

4.編寫用於測試棧的各種功能的函式 do_comman()和get_command()以及一些輔助的介紹函式introduction(),help()。

5.編寫主函式。執行並測試棧的各種功能。

}}實驗截圖:

1.鏈式棧中以節點的形式儲存棧中的元素,每個節點node由要儲存的元素entry和指向下乙個節點的指標next組成。這樣大大避免了由連續陣列實現棧所帶來的限制——不用從一開始就限定棧可儲存元素的大小,在新增新的元素時再申請空間,而且節省了不必要的空間。因為節點的儲存在物理結構上不一定是連續的,只有記憶體不足時才會達到full的狀態(通常情況是夠用的)。

2.指標的運用是件巧妙而又危險的工作。在每改變乙個元素(新增或刪除)都應注意指標知否指向了正確的位址,避免懸空指標和記憶體洩露。

3.因為指標的運用,編寫stack類時必須編寫自己析構函式,拷貝建構函式以及賦值操作符。

資料結構 鏈式棧

編譯錯誤 passing const linkstack as this argument discards qualifiers fpermissive 解決方法 c 中const 引用的是物件時只能訪問該物件的const 函式,因為其他函式有可能會修改該物件的成員,編譯器為了避免該類事情發生,會...

資料結構之鏈式棧

好久不見,前面我們學過了資料結構的順序棧。今天我們來學習下鏈式棧的實現,鏈式棧的話,還是要利用前面我們實現的鏈式鍊錶,不知道鏈式鍊錶的,出門左轉,前面就有介紹。第七個例子,鏈式棧的實現 注 把我們先前實現的鏈式鍊錶的標頭檔案和實現檔案包含進來 標頭檔案 ifndef linkstack h defi...

資料結構棧(鏈式實現)

真正的棧操作是在棧頂,這裡給出的棧是帶了頭結點的棧,也就是說head next代表圖示棧頂,head next data是1 實現 include include typedef int datatype typedef struct snode lsnode 初始化帶頭結點的鏈式堆疊,初始化函式中...