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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用栈结构实现中缀转后缀算法(python)

發(fā)布時間:2025/4/16 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用栈结构实现中缀转后缀算法(python) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

看了網(wǎng)上的中綴變后綴的python算法,感覺都沒北大陳斌老師講的好,最近又在解決密碼學的問題,現(xiàn)在遇到算式里含有自變量沒辦法解決,害,python學的太菜也不知道咋解決。但覺得有必要和大家分享用棧來解決中綴轉后綴的算法,就貼一下了哈,我也沒做啥工作,就是注釋會更詳細點,昨天看了好久才明白呢。

from stack import Stackdef infixToPostfix(infixexpr):prec={}prec["*"]=3prec["/"]=3prec["+"]=2prec["-"]=2prec["("]=1opStack=Stack()#存操作符的棧postfixList=[]tokenList=infixexpr.split()#存達式的列表listfor token in tokenList:if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":postfixList.append(token)elif token=='(':opStack.push(token)#左括號壓入棧elif token==')':topToken=opStack.pop()#toptoken第一次出現(xiàn) token=右括號,topToken存棧里刪除的第一個元素 操作符那種while topToken !='(':######toptoken不是左括號,是操作符postfixList.append(topToken)#操作符加入表達式列表postfixlisttopToken=opStack.pop()#加入后再刪除else:while (not opStack.isEmpty()) and (prec[opStack.peek()]>=prec[token]):#要是存操作符和括號的棧不空而且棧頂操作符優(yōu)先級大于循環(huán)到的操作符優(yōu)先級postfixList.append(opStack.pop())#后綴表達式先加入棧頂操作符opStack.push(token)#上述條件都不符合,操作符直接壓入棧頂這是為了開始啦while not opStack.isEmpty():#存操作符和括號的棧不空postfixList.append(opStack.pop())#進入操作符并清空棧,這是最后的結尾啦return " ".join(postfixList)print(infixToPostfix("A * B + C * D")) print("1")

大家python里一定記得縮進,昨天就一個while寫錯了導致看了好久檢查出來。

總結

以上是生活随笔為你收集整理的使用栈结构实现中缀转后缀算法(python)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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