4 棧與隊列

4 棧與隊列
4.1 棧
    定義:棧是限定僅在表尾進行插入和刪除操作的線性表。
    後進先出 LIFO
    棧頂:允許插入、刪除的一端
    棧底:不允許插入、刪除
4.2 棧的應用
4.2.1 遞歸
    菲博拉切數列
    int fbi(int i){
        if(i<2)
            return i==0?0:1;
        return fbi(i-1)+fbi(i-2);
    }

    每個遞歸定義必須至少有一個條件,滿足是遞歸不再進行,即不在引用自身而是返回值退出
    
4.2.2 四則表達式的求值
    四則運算的逆波蘭表達式:所有符號都在運算數字後面出現
    9+(3-1)*3+10/2       9 3 1 - 3 * + 10 2 / +

    利用棧的運算規則:從左到右遍歷表達式的每個數字和符號,遇到是數字就進棧,遇到符號就將棧頂兩個數字出棧運算將結果進棧,最後則爲最終結果。
    
中綴表達式轉後綴表達式規則:從左到右遍歷中綴表達式每個數字和符號,若是數字就輸出,若是符號,則判斷其與棧頂符號的優先級,是右括號或優先級不高於棧頂符號則棧頂元素依次出棧並輸出,並將當前符號進棧,知道輸出後綴表達式爲止。

1.當讀到一個操作數時,立即將它放到輸出中。操作符則不立即輸出,放入棧中。遇到左圓括號也推入棧中。

2.如果遇到一個右括號,那麼就將棧元素彈出,將符號寫出直到遇到一個對應的左括號。但是這個左括號只被彈出,並不輸出。

3.在讀到操作符時,如果此時棧頂操作符優先性大於或等於此操作符,彈出棧頂操作符直到發現優先級更低的元素位置。除了處理)的時候,否則決不從棧中移走"("。操作符中,+-優先級最低,()優先級最高。

4.如果讀到輸入的末尾,將棧元素彈出直到該棧變成空棧,將符號寫到輸出中。


4.3 隊列
    隊列是隻允許在一段進行插入操作,而在另一端進行刪除操作的線性表
    先進先出 FIFO
    









發佈了31 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章