利用棧實現逆波蘭演算法

2021-07-12 04:58:46 字數 754 閱讀 7839

1.逆波蘭表示式?   

在我們的普遍認知中,計算的優先順序總是和()相關,形如(1+2)*(3+4)這樣的式子,我們看起來十分的清晰明了,但對計算機來說,它會進行很多次的判斷來確定乙個運算的優先順序。於是在很久很久之前就有乙個人發現,如果我們將上述算式寫成形如1 2 + 3 4 + *的形式,計算機判斷起來會顯得格外的快,效率也會更高,然而它的實現原理是什麼樣的呢。

2.演算法分析

經過觀察,我們發現該算式將引數放在前面,運算操作符放在兩個要進行計算的引數之後,我們可以得出這樣的思路:每次我們將拿到的資料壓棧,當遇見運算子時,就彈出兩個資料讓他們進行相應的計算,這樣,計算完成之後我們再將運算結果入棧,最後我們拿到最終結果!

程式例項:

#includeusing namespace std;

typedef char element;

struct node

};class  dstack

~dstack() }

public:

void push(element d)

element pop() };

int rpn()

} int re = s1.pop() - '0';

return re;

}int main()

綜上,我們選擇使用switch case控制流機制來實現我們的資料判斷使程式顯得簡潔明瞭。

本文出自 「zimomo」 部落格,請務必保留此出處

逆波蘭式 棧實現

因為做二叉樹非遞迴的前後中遍歷,用到棧的方法。xpp說那就乾脆把四則運算,逆波蘭式 棧的實現做了。這是參考別人的程式寫的,注釋比較亂。而且這個是直接實現計算機計算的四則運算,沒有將逆波蘭的表示式列印出來。今天腰太酸了,明天改一改,把逆波蘭式列印出來噻333333.棧還有迷宮演算法是不是?現在腦子裡之...

逆波蘭演算法

中綴表示式轉字尾表示式 棧實現1.從左到右掃瞄字串 2.如果遇到數字,就輸出 3.如果遇到運算子,1 棧空時,直接入棧 2 棧非空時,與棧頂元素進行優先順序比較,如果運算子優先順序大,入棧,反之,則彈出優先順序小的棧頂元素 並輸出 直到運算子符合入棧條件,入棧int judge char ch st...

C 逆波蘭演算法

逆波蘭表示式又叫做字尾表示式。在通常的表示式中,二元運算子總是置於與之相關的兩個運算物件之間,這種表示法也稱為中綴表示。波蘭邏輯學家j.lukasiewicz於1929年提出了另一種表示表示式的方法,按此方法,每一運算子都置於其運算物件之後,故稱為字尾表示式。逆波蘭是一種十分有用的表示式,它將複雜表...