中綴表示式轉字尾表示式
初始化兩個棧,乙個放字尾表示式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...