嚴蔚敏數據結構學習筆記三.棧和隊列


第三章.棧和隊列

3.1棧的類型定義(存在棧頂,棧底)
相對於線性表特點爲:插入和刪除只能在特定的地方進行。
3.2棧的應用舉例
1,數制轉換,
2.括號匹配的檢驗,
檢驗括號是否匹配的方法用"期待的急迫程度"這個概念來描述。
分析可能出現的不匹配的情況:
1),到來的右括弧非是所"期待"的(和棧頂元素不相等);
2),到來的是"不速之客"(棧以經空,表達式沒還有右括弧);
3),直到結束,也沒有到來所"期待"的(棧不空,表達式結束);
算法的設計思想:
1),凡出現左括弧,則進棧;
2),凡出現右括弧,首先檢查棧是否空,若棧空,則表明"右括弧"多了否則和棧頂元素比較,若相等,則"左括弧出棧"否則不匹配
3),表達式檢驗結束時,若棧空,則匹配正確,否則表明"左括弧"多了。
3,行編輯程序問題,
設立一個輸入緩衝區,用以接受用戶輸入的一行字符,然後逐行存入用戶數據區。
4,迷宮求解,
基本思想:
1),若當前位置"可通",則納入路徑,繼續前進
2),若當前位置"不可通",則後退,換向探索
3),若四周均"不可通",則從路徑中刪除
5,表達式求值,

表達式分爲:前綴式,中綴式,後綴式
特點:1,操作數之間的相對次序不變;
2,運算符的相對次序不同;
3,中綴式丟失了括弧信息,致使運算的次序不確定;
4,前綴式的運算規則爲:連續出現的兩個操作數和在它們之前緊靠它們的運算符構成一個最小表達式;
5,後綴式的運算規則爲:運算符在式中出現的順序恰爲表達式的運算順序;每個運算符和在它之前出現且緊靠它的兩個操作數構成一個最小表達式。
後綴式求值方法:先找運算符(保存在棧中),再找操作數。
從原表達式求得後綴式的規律爲:
1),設立操作數棧;
2),設表達式的結束符爲"#",並設運算符棧的棧底爲"#";
3),若當前字符是操作數,則直接發送給後綴式;
4),若當前運算符的優先數高於棧頂運算符,則進棧;
5),否則,退出棧頂運算符發送給後綴式;
6),"("對它之前後的運算符起隔離作用,")"可視爲自相應左括弧開始的表達式結束;
6,實現遞歸。
當一個函數的運行期間調用另一個函數時,在運行該被調用函數之前,需先完成三件事:
1),將所有的實參,返回地址等信息傳遞給被調用函數保存;
2),爲被調用函數的局部變量分配存儲區;
3),將控制轉移到被調用函數的入口。
從被調用函數返回調用函數之前,應該完成:
1),保存被調函數的計算結果;
2),釋放被調用函數的數據區;
3),依照被調用函數保存的返回地址將控制轉移到調用函數。
多個函數嵌套調用的規則是:後調用先返回此時的內存管理實行"棧式管理"
3.3棧類型的實現(順序棧,鏈棧)
3.4隊列的類型定義
存在隊頭,隊尾
3.5隊列類型的實現(鏈隊列--鏈式映象,循環隊列--順序映象)

例題算法
判別讀入的字符序列是否爲"迴文"的算法的基本思想是:將依次讀入的字符分別插入棧和隊列,然後依次比較"棧頂"和"隊頭"的字符。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章