當(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爷以后会好好编程的,csdn才是爷的社交
- 下一篇: 汉明距离三公理证明