1. 程式人生 > >c++中的 棧 stack 用法

c++中的 棧 stack 用法

C++ Stack(堆疊) 是一個容器類的改編,為程式設計師提供了堆疊的全部功能,——也就是說實現了一個先進後出(FILO)的資料結構。

c++ stl棧stack的標頭檔案為

#include <stack> 

c++ stl棧stack的成員函式介紹

操作 比較和分配堆疊

empty() 堆疊為空則返回真

pop() 移除棧頂元素

push() 在棧頂增加元素

size() 返回棧中元素數目

top() 返回棧頂元素

 

 

棧(stack)是限制插入和刪除只能在一個位置上進行的線性表,該位置在表的末端,叫做棧頂。新增元素只能在尾節點後新增,刪除元素只能刪除尾節點,檢視節點也只能檢視尾節點。新增、刪除、檢視依次為入棧(push)、出棧(pop)、棧頂節點(top)。形象的說,棧是一個先進後出(LIFO)表,先進去的節點要等到後邊進去的節點出來才能出來。

如圖1,是一個棧的形象圖,top指標指向的是棧頂節點,所以我們可以通過top訪問到2節點,但是0和1節點由於先於2進入這個表,所以是不可見的。如果把0節點當做頭節點,2節點當做尾節點,那麼棧限制了訪問許可權,只可以訪問尾節點。

如圖2,當新增一個節點3的時候,只能在棧頂節點,也就是尾節點後新增,這樣3節點變成了棧頂,2節點變成了不可見節點,訪問的時候只能訪問到3節點。入棧時限制了插入地址,只能在棧頂新增節點。

當我們執行出棧的命令時,圖2的棧頂元素是3節點,刪除的時候只能允許刪除棧頂的元素,這樣子3節點被刪除,top指向刪除後的棧頂2節點,如圖3所示。

棧有兩種是實現結構,一種是順序儲存結構,也就是利用陣列實現,一種是鏈式儲存結構,可以用單鏈表實現。陣列實現棧很簡單,用一個下標標記top來表示棧頂,top==-1時,棧空,top==0時,表示棧裡只有一個元素,通過訪問top為下標的陣列元素即可。出棧top自減,入棧top自加就OK了。

單鏈表實現棧要比單鏈表的實現簡單點。我們通過在表的尾端插入來實現push,通過刪除尾節點來實現pop,獲取尾節點的元素來表示top。我修改了連結串列那一章的單鏈表程式碼,把頭節點當做棧頂節點,實現了一個簡單的棧模板,僅供學習所用。程式碼會不定時更新。