中綴表示式變字尾分析

2021-07-24 04:53:28 字數 1038 閱讀 9349

@(演算法學習)

將中綴變為相應的字尾,需要根據的優先順序來進行棧的變化。

具體操作是:我們用乙個棧即可,儲存的是符號棧,數字直接輸出,因為符號輸出順序以及時機需要調整,因此用棧做中轉。

在掃瞄符號時,我們稱符號的優先順序是棧外優先順序,這個時候在決定誰可以進棧。

等到掃到非數字符號,則可以有機會進棧,每個非數字符號有優先順序定義。進到棧的元素呢,優先順序要被重新分配。

進棧時要與棧頂元素比較,跨在門檻的瞬間,棧外元素用的是棧外的優先順序,棧內元素是棧內元素的優先順序。只有棧外的大,才能進來。否則,比棧頂小或者相等,都要讓棧頂的出去,直到有比棧外的小的棧頂為止,然後才能進去。

總的優先順序分配很簡單,1~6.

棧外的左括號,一定要進得去,所以有最大優先順序6,進去以後,將是最晚出來的,因此,進去以後馬上變為最小的1。

右半括號在棧外,與棧頂比較時,它需要找到棧內的另一半左括號,因此它的優先順序與棧內的左括號相等,為1,是最小的。進去後變為最大優先順序,實際上右括號是進不去的。

加減乘除的優先順序在棧外比棧內高1。

加減比乘除對應小1。

無論棧內棧外乘除一定比加減高。

這樣的話,棧頂是加減時,乘除一定進來。

棧頂是乘除時,加減進來一定是把乘除先擠出去。

此外,加進來,棧頂是減時,棧頂也要出去,相等也是出棧的條件。

同樣,乘除也是。

我們稱作同類相殘。

一般以icp(in coming priority)表示棧外優先順序

isp(in stack priority)表示棧內優先

int icp (char ch) 的定義如下:

int icp(char ch)

}int isp (char ch) 的定義如下:

int isp(char ch)

}

待補充例子。

舉個例子:求中綴表示式a/b+(c*d-e*f)/g轉換為字尾表示式過程中,當掃瞄到f時,棧中的元素依次是:+(

−∗

中綴表示式 字尾表示式

中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...

中綴表示式 字尾表示式

數學表示式稱為中綴表示式,符合人的思考習慣 1 2 3運算子放在數字後面,符合計算機運算 123 遍歷中綴表示式中的數字和符號 左括號 入棧 運算符號 需要與棧頂符號進行優先順序比較 遍歷結束 將棧中所有符號彈出並輸出。例 中綴表示式 1 2 5 3 4 2 1 1 數字1直接輸出 結果 1 棧 空...

中綴表示式 字尾表示式

表示式 x a b c d e 的字尾表示形式可以為 c a xab cde b xa bc de c xabcd e d xabcde 表示式前字尾表達形式 乙個中綴式到其他式子的轉換方法 這裡我給出乙個中綴表示式 a b c d e 第一步 按照運算子的優先順序對所有的運算單位加括號 式子變成拉...