使用栈结构实现中缀转后缀算法(python)
生活随笔
收集整理的這篇文章主要介紹了
使用栈结构实现中缀转后缀算法(python)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看了網上的中綴變后綴的python算法,感覺都沒北大陳斌老師講的好,最近又在解決密碼學的問題,現在遇到算式里含有自變量沒辦法解決,害,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第一次出現 token=右括號,topToken存棧里刪除的第一個元素 操作符那種while topToken !='(':######toptoken不是左括號,是操作符postfixList.append(topToken)#操作符加入表達式列表postfixlisttopToken=opStack.pop()#加入后再刪除else:while (not opStack.isEmpty()) and (prec[opStack.peek()]>=prec[token]):#要是存操作符和括號的棧不空而且棧頂操作符優先級大于循環到的操作符優先級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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爷以后会好好编程的,csdn才是爷的社交
- 下一篇: 汉明距离三公理证明