堆栈总结
- 堆棧
- 什么是堆棧
- 堆棧的抽象數據類型描述
- 棧的順序存儲實現
堆棧
什么是堆棧
計算機如何進行表達式求值?
算術表達式5+6/2-3*4。
正確理解:
5+6/2-3*4 = 5+3-3*4 = 8-3*4 = 8-12 = -4
由兩類對象構成的:
運算數,如2、3、4
運算符號,如+、-、*、/ ? 不同運算符號優先級不一樣
后綴表達式
中綴表達式:運算符號位于兩個運算數之間。如 ,a + b * c - d / e
后綴表達式:運算符號位于兩個運算數之后。如, a b c *+ d e /-
后綴表達式求值策略:從左向右“掃描”,逐個處理運算數和運算符號
1. 遇到運算數怎么辦?如何“記住”目前還不未參與運算的數?
2. 遇到運算符號怎么辦?對應的運算數是什么?
6 2 / 3 - 4 2 *+ = ?
6/2-3+4*2
注意后綴的運算數是緊挨著運算符號之前的兩個數
啟示:需要有種存儲方法,能順序存儲運算數, 并在需要時“倒序”輸出!
堆棧(Stack):
具有一定操作約束的線性表 只在一端(棧頂,Top)做 插入、刪除
插入數據:入棧(Push)
刪除數據:出棧(Pop)
后入先出:Last In First Out(LIFO)
堆棧的抽象數據類型描述
類型名稱: 堆棧(Stack)
數據對象集:一個有0個或多個元素的有窮線性表。
操作集:長度為MaxSize的堆棧S Stack,堆棧元素item ElementType
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 ):判斷堆棧S是否為空;
5、ElementType Pop( Stack S ):刪除并返回棧頂元素
Push 和 Pop 可以穿插交替進行;
按照操作系列 (1)Push(S,A), Push(S,B),Push((S,C),Pop(S),Pop(S),Pop(S) 堆棧輸出是? CBA
(2) 而Push(S,A), Pop(S),Push(S,B),Push((S,C),Pop(S),Pop(S) 堆棧輸出是? ACB
棧的順序存儲實現
棧的順序存儲結構通常由一個一維數組和一個記錄 棧頂元素位置的變量組成。
1.入棧 2.出棧 3.判斷 棧滿 棧空
堆棧的其他應用:
函數調用及遞歸實現
深度優先搜索
回溯算法
。。。
總結
- 上一篇: 物理实验数据处理(c语言)
- 下一篇: linux用户开放crontab权限,l