有關中綴表示式轉換成字尾表示式的演算法

2021-04-13 12:37:04 字數 651 閱讀 8429

中綴表示式是一般進行數**算時用的式子,如: 4+2*3-2+6*5*(2-1)

字尾表示式主要是方便計算機對乙個數學式子求值而衍生出來的,如上面那個式子的字尾表示式為:

4 2 3 * + 2 - 6 5 * 2 1 - *

閒話不說,轉換演算法如下:

str1 放中綴表示式,並在後面加乙個'#'

str2 放字尾表示式, 當然先將其置空,另開乙個棧放符號,並預先在符號棧存一優級極低的'#'

優先順序按四則運算順序, () >  * /  > +  -  > #; * = /    ; + = -

1, 從左到右讀取str1;

2, 如果是運算元,則直接放進str2裡;

3,如果是操作符, 則與棧頂的操作符相比較, 當然,這包括'#', 如果新讀取的操作符比棧頂操作符的優先順序高, 則直接將操作符進棧,如果新讀取的操作符與棧頂操作符的優先順序相等或者小於棧頂操作符的優先順序, 則pop()出棧頂操作符,將其放進str2中, 再將新讀取的操作符與新的棧頂操作符比較;

4,如果是'(', 直接進棧;

5, 如果是')',則依次彈出棧裡面的操作符,直到遇到乙個'('為止;

6,如果是'#',則說明已將中綴表示式讀取完了, 所以直接將棧內操作符彈出放至str2中,包括棧中的'#'.

實現**過兩天會給出.

中綴表示式轉換成字尾表示式

一 基礎知識 中綴表示式 人們常用的表示式就叫做中綴表示式,如a b c d 字尾表示式 又叫做逆波蘭表示式,由一名波蘭數學家提出,方便進棧操作 字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字...

中綴表示式轉換成字尾表示式

中綴表示式轉字尾表示式 思路 三個方法 將中綴表示式轉換成 中綴表示式對應的 list 自定義運算子優先順序 將中綴表示式對應的 list 轉換成 字尾表示式.1.1 使用 list 更好的和 stack 配合,list 比 字串的遍歷更加靈活.將中綴表示式對應的 list 轉換成 字尾表示式 2....

中綴表示式轉換成字尾表示式

優先順序 如果輸入運算子的優先順序低於或等於棧頂的操作符優先順序,則棧內元素進入輸入佇列,輸入運算子入棧。乙個簡單的例子 演算法示意圖,使用了3個空間。輸入用符號代替,如果輸入是乙個數字則直接進輸出佇列,即圖中 b d f h 如果輸入是運算子,則壓入操作符堆疊,即圖中 c e 但是,如果輸入運算子...