數據結構筆記(線性結構->堆棧)

前綴表達式 -+abc/de
中綴表達式 a+b
c-d/e
后綴表達式 abc*+de/-

堆棧(stack):具有一定操作約束的線性表,只在一端(棧頂:Top)做插入、刪除
插入數據:入棧(push)
刪除數據:出棧(pop)
后入先出:Last In First Out(LIFO)

堆棧操作:
1、Stack CreateStack(int MaxSize):生成空堆棧,最大長度為MaxSize
2、int IsFull(Stack S,int MaxSize):判斷堆棧S是否已滿
3、void Push(Stack S,ElementType item):將元素item壓入堆棧
4、int isEmpty(Stack S):判斷堆棧是否為空
5、ElementType Pop(Stack S):刪除并返回棧頂元素

堆棧的鏈式存儲實現(xiàn)

實際就是一個單鏈表,叫做鏈棧,棧頂指針Top應該在鏈表的頭部(尾部則Pop操作無法完成)
數組大小固定,鏈表不固定

中綴表達式求值

解決方法:中綴表達式通過堆棧轉化為后綴表達式,求值 (T(N) = O(N))
轉化方法:
1、運算數:直接輸出
2、左括號:壓入堆棧
3、右括號:將棧頂的運算符彈出并輸出,直到遇到左括號(左括號出棧,不操作)
4、運算符:
1、優(yōu)先級大于棧頂運算符時、壓棧
2、優(yōu)先級小于棧頂運算符時,將棧頂運算符彈出并輸出,并對新的棧頂運算符做相同比較直到大于棧頂運算符優(yōu)先級,然后將新運算符壓棧
5、各運算符操作完畢,將堆棧中的剩余運算符一并輸出

例:
3+2*((8+12)/10)-(100/5)

3 2 8 12 + 10 / * + 100 5 / -

-13

堆棧應用:
1、函數調用及遞歸實現(xiàn)
2、深度優(yōu)先搜索(?
3、回溯算法(? 老鼠走迷宮?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容