求字尾表示式的值

2021-10-22 10:47:10 字數 1365 閱讀 7865

上篇文章介紹了 中綴表示式 轉 字尾表示式

這篇文章接著分享 計算字尾表示式的值

需求:求字尾表示式的值;

輸入:字尾表示式;

輸出:運算結果

from test05_stack.stack import stack

import re

defafter_opt_ret

(expr)

:# 運算元範圍

# expr_list = range(10000)

# 初始化乙個棧,用來儲存運算元

sk = stack(

)# 從前到後掃瞄運算元列表

for item in expr.split():

# 如果是運算元,直擊進棧

if re.match(r'\d+'

, item)

: sk.push(

int(item)

)# 如果是操作符,把棧中最上面的兩個數拿出來運算,把運算結果儲存到棧中

elif item in

"+-*/"

: expr02 = sk.pop(

) expr01 = sk.pop(

) ret = operate(item, expr01, expr02)

sk.push(ret)

# 取出棧中表示式的執行結果

# 返回表示式的運算結果

return sk.peek(

)def

operate

(opt, expr01, expr02)

:"""

兩個數運算,返回結果

:param opt: 操作符

:param expr01: 運算元1

:param expr02: 操作2

:return: 運算結果

"""if opt ==

"+":

return expr01 + expr02

elif opt ==

"-":

return expr01 - expr02

elif opt ==

"*":

return expr01 * expr02

elif opt ==

"/":

return expr01 / expr02

# 測試

print

(after_opt_ret(

"10 20 30 + +"))

print

(after_opt_ret(

"10 20 30 * +"))

# 測試結果

60610

中綴表示式轉字尾表示式 求字尾表示式值

中綴表示式轉字尾表示式 佇列q和棧s q存放字尾表示式結果 s存放操作符 設棧頂元素top 當前讀取元素a 演算法如果s是空棧 a入棧非空棧 a不是操作符,a插入佇列q 如果a為 a入棧 否則,如果a為 把棧內操作符出棧依次插入佇列q,直至遇到得 元素出棧為止 否則,如果a優先順序大於top,a入棧...

中綴表示式轉字尾表示式 求表示式的值

中綴轉字尾需要遵守以下規則 1 運算元 直接輸出 2 直接入棧 3 將 以前的直接輸出,並將 出棧 不輸出 4 運算子 將優先順序不小於該運算子的操作符出棧,最後將該運算子入棧 5 最後將棧中的元素依次彈出 6 優先順序 大於 大於 class intosuf if op i equals if o...

計算表示式值(字尾表示式) 棧

處理表示式主要是對優先順序以及括號的判斷 1.運算子棧頂的優先順序小於加入的時,需要將所有的不評級的取出並計算,2.當遇到 時,需要括號內的運算全部處理 2.其他情況全部加入運算子棧和資料棧 include include include using namespace std typedef lo...