日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

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

大家python里一定記得縮進(jìn),昨天就一個(gè)while寫錯(cuò)了導(dǎo)致看了好久檢查出來。

總結(jié)

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

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