基本資料結構:棧(stack)
棧(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了。
**如下:
template很清楚,除了clear函式外,所有的方法的時間複雜度都是o(1)。這種實現方式的缺點在於對new和delete的呼叫的開銷是昂貴的,所以採用陣列的方式實現會更好一點。class
stacknode
t data;//值
stacknode* next;//
指向下乙個節點的指標
};template
class
mystack
;template
mystack
::mystack()
template
inline unsigned
int mystack::length()
template
void mystack::push(t x)
template
bool mystack::isempty()
template
void mystack::pop()
template
t mystack
::top()
template
void mystack::clear()
node=null;
headnode=null;
stacklength=0
;}
棧的應用
使用棧的時候一般不用自己重新去寫,因為stl給我們實現了乙個很安全的棧,可以放心去使用。也可以用陣列模擬乙個,很簡單。
編譯器呼叫函式就用了棧結構,當第乙個函式還沒執行完畢,呼叫第二個函式的時候,編譯器就會把第乙個函式壓棧,第二個函式呼叫完畢的時候,就會取棧頂函式,也就是第乙個函式繼續執行。
平衡符號
中綴轉字尾
字尾試求值
poj 3250
poj 1363
poj 1208
poj 1686
poj 3250
hdu 1022
基本資料結構 棧(stack)
基本資料結構 棧 stack 棧 stack 是限制插入和刪除只能在乙個位置上進行的線性表,該位置在表的末端,叫做棧頂。新增元素只能在尾節點後新增,刪除元素只能刪除尾節點,檢視節點也只能檢視尾節點。新增 刪除 檢視依次為入棧 push 出棧 pop 棧頂節點 top 形象的說,棧是乙個先進後出 li...
基本資料結構 棧
基本資料結構 棧 一.線性資料結構 我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques 雙向佇列 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。線性資料結構有兩端,...
基本資料結構 棧
我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques 雙向佇列 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。線性資料結構有兩端,有時被稱為左右,某些情況被稱為前後。...