Python實現中綴表示式轉字尾表示式

2021-09-27 03:05:18 字數 1462 閱讀 4373

中綴表示式轉字尾表示式

初始化兩個棧,乙個放字尾表示式exp,乙個放操作符ops

1遇到數字,放到exp中

2遇到左括號,放入ops

3遇到右括號,就把ops的彈出到exp中,直到遇到左括號,這樣消除一對括號

4遇到操作符,比較當前的ops,和棧頂ops的優先順序,如果當前的比較高,就入ops,不然,就把棧頂的彈出,直到可以入。

5掃瞄完以後,ops還有運算子,直接放入exp。

ops_rule = 

def middle_to_after(s):

expression =

ops =

ss = s.split(' ')

for item in ss:

if item in ['+', '-', '*', '/']:

while len(ops) >= 0:

if len(ops) == 0:

break

op = ops.pop()

if op == '(' or ops_rule[item] > ops_rule[op]:

break

else:

elif item == '(':

elif item == ')':

while len(ops) > 0:

op = ops.pop()

if op == '(':

break

else:

else:

while len(ops) > 0:

return expression

def expression_to_value(expression):

stack_value =

for item in expression:

if item in ['+', '-', '*', '/']:

n2 = stack_value.pop()

n1 = stack_value.pop()

result = cal(n1, n2, item)

else:

return stack_value[0]

def cal(n1, n2, op):

if op == '+':

return n1 + n2

if op == '-':

return n1 - n2

if op == '*':

return n1 * n2

if op == '/':

return n1 / n2

if __name__ == '__main__':

expression = middle_to_after('9 + ( 3 * ( 4 - 2 ) ) * 3 + 10 / 2')

value = expression_to_value(expression)

print(value)

中綴表示式轉字尾表示式(Python實現)

中綴表示式轉字尾表示式 中綴表示式轉字尾表示式的規則 1.遇到運算元,直接輸出 2.棧為空時,遇到運算子,入棧 3.遇到左括號,將其入棧 4.遇到右括號,執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出 5.遇到其他運算子 時,彈出所有優先順序大於或等於該運算子的棧頂元素,然後將...

中綴表示式轉字尾表示式 python

這是之前資料結構學過的知識,現在忘了複習一下,如果有小夥伴對這方面的知識忘了的話我建議看這篇部落格,講的非常詳細,我這裡主要講一下用 實現的思路 初始乙個存放結果的列表 result和存放操作符的棧op stack 從前往後遍歷中綴表示式,處理一下四種情況 為數字 則直接新增到result後面 為 ...

java實現中綴表示式轉字尾表示式

public class stacktest 等級很重要 優先順序最高的是 因為一定會進棧 次之為 再為 優先順序最低的是 一定會連帶其他的運算子出棧 數字不進棧 param c return public static int level char c else if indexof c 1 el...