日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python前缀表达式求值_python数据结构与算法 11 后缀表达式求值

發(fā)布時間:2025/4/5 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python前缀表达式求值_python数据结构与算法 11 后缀表达式求值 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從本節(jié)開始,刪除原版的英文,直接發(fā)譯后的文稿。

后綴表達式求值

棧的最一個應(yīng)用例子,計算一個后綴表達式的值。這個例子中仍然用棧的數(shù)據(jù)結(jié)構(gòu)。不過,當掃描表達式的時候,這次是操作數(shù)壓棧等待,不是轉(zhuǎn)換算法中那樣讓操作符等待。另一條思路是,無論何時看到輸入一個操作符,最近的兩個操作數(shù)就是操作對象。

為了說清楚一點,考慮表達式4 5 6 * +。從左到右掃描時,首先得到4和5,不過此時,并不知道怎樣處理這兩個數(shù),直到看到后面的操作符。所以要把這兩個數(shù)先壓棧,得到操作符以后再出棧。

這個例子中,下一個符號仍然是操作數(shù),所以照舊壓棧,并檢查下一個。現(xiàn)在看到操作符*,這意味著最近兩個操作數(shù)要用來做乘法。出棧兩次,得到兩個操作數(shù)并相乘(在本例中是結(jié)果是30)

這個計算結(jié)果要壓回到棧內(nèi),并作為下一個操作符的對象。當最后一個操作符工作結(jié)束,棧內(nèi)應(yīng)該只有一個數(shù)值,出棧并作為計算結(jié)果返回。圖10顯示了這個求值過程中,棧內(nèi)容的變化。

圖11顯示了一個稍微復(fù)雜的表達式求值過程。7 8 + 3 2 + /。這個例子中有兩點要注意。第一,棧的大小,隨著子表達式的計算過程而膨脹,收縮,再膨脹。第二,除法操作符要小心處理,因為后綴表達式的操作數(shù)順序不變,但當兩個操作數(shù)出棧時,順序反了。因為除法不支持交換律,所以15/5與5/15不同,必須保證順序沒有交錯。

算法假定后綴表達式是一系列被空格分隔的字符,操作符是* /+ -,操作數(shù)假定是一位整數(shù)。最終結(jié)果也是整數(shù)。

1

建立一個空棧,operandStack

2

字符串使用split轉(zhuǎn)為列表

3

從左到右檢索列表

如果是操作數(shù),字符轉(zhuǎn)為整數(shù),壓棧

如果是操作符,出棧兩次。第一次出棧的是第二個操作數(shù),第二次出棧的是第一個操作數(shù)。計算結(jié)果,并壓回棧。

4

檢索結(jié)束,出棧結(jié)果就是返回值。

完整的函數(shù)代碼如下,其中的doMath是算法輔助函數(shù),定義為兩個操作數(shù)和一個操作符的計算。

from pythonds.basic.stack import Stack

def postfixEval(postfixExpr):

operandStack = Stack()

tokenList =postfixExpr.split()

for token in tokenList:

if token in"0123456789":

operandStack.push(int(token))

else:

operand2 =operandStack.pop()

operand1 =operandStack.pop()

result =doMath(token,operand1,operand2)

operandStack.push(result)

return operandStack.pop()

def doMath(op, op1, op2):

if op == "*":

return op1 * op2

elif op == "/":

return op1 / op2

elif op == "+":

return op1 + op2

else:

return op1 - op2

print(postfixEval(‘7 8 + 3 2 + /‘))

原文:http://blog.csdn.net/python2014/article/details/21342223

總結(jié)

以上是生活随笔為你收集整理的python前缀表达式求值_python数据结构与算法 11 后缀表达式求值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。