使用栈实现中缀表达式转为后缀表达式和后缀表达式的求解
生活随笔
收集整理的這篇文章主要介紹了
使用栈实现中缀表达式转为后缀表达式和后缀表达式的求解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
書籍在線網址http://interactivepython.org/runestone/static/pythonds/index.html
?
中文翻譯書籍:https://facert.gitbooks.io/python-data-structure-cn/
?
?
將中綴表達式轉換為后綴表達式
中綴表達式(上圖,一般書寫)轉換為后綴表達式(ABC*+)
?
?
方法:
- 如果標記是操作數,將其附加到輸出列表的末尾。
- 如果標記是左括號,將其壓到 opstack 上。
- 如果標記是右括號,則彈出 opstack,直到刪除相應的左括號。將每個運算符附加到輸出列表的末尾。
- 如果標記是運算符,*,/,+或?-?,將其壓入 opstack。但是,首先刪除已經在 opstack 中具有更高或相等優先級的任何運算符,并將它們加到輸出列表中。
?
使用字典來保存操作符優先級,這個字典將每個運算符映射到一個整數,可以與其他運算符的優先級(我們使用整數3,2和1)進行比較。左括號將賦予最低的值。這樣,與其進行比較的任何運算符將具有更高的優先級
1 #coding:utf8 2 from stack import Stack 3 def infixToPostfix(infixexpr): 4 prec = {} 5 prec["*"] = 3 6 prec["/"] = 3 7 prec["+"] = 2 8 prec["-"] = 2 9 prec["("] = 1 10 opStack = Stack() 11 postfixList = [] #創建后綴輸出列表 12 tokenList = infixexpr.split() #將中綴列表轉換為字符串 13 14 for token in tokenList: 15 #如果標記是操作數,將其附加到輸出列表末尾 16 if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789": 17 postfixList.append(token)18 #如果標記是左括號,將其壓棧 19 elif token == '(': 20 opStack.push(token)
21 #如果標記是右括號,彈棧添加到輸出列表末尾直到遇到左括號 22 elif token == ')': 23 topToken = opStack.pop() 24 while topToken != '(': 25 postfixList.append(topToken) 26 topToken = opStack.pop()
27 #如果標記是運算符,刪除已經在棧中具有更高或相等優先級的任何運算符并添加到輸出列表末尾,再壓棧 28 else: 29 while (not opStack.isEmpty()) and (prec[opStack.peek()] >= prec[token]): 30 postfixList.append(opStack.pop()) 31 opStack.push(token) 32 33 while not opStack.isEmpty(): #輸入表達式完全處理后將棧中剩下內容添加到輸出列表末尾 34 postfixList.append(opStack.pop()) 35 return " ".join(postfixList) #列表轉字符串 36 37 print(infixToPostfix("A * B + C * D")) 38 print(infixToPostfix("( A + B ) * C - ( D - E ) * ( F + G )"))
#A B * C D * +
#A B + C * D E - F G + * -
?
?
后綴表達式求值
對后綴表達式4 5 6 * +求值
?
?
方法:?
?
- 如果標記是操作數,將其從字符串轉換為整數,并將值壓到operandStack。
- 如果標記是運算符*,/,+或-,它將需要兩個操作數。彈出operandStack 兩次。 第一個彈出的是第二個操作數,第二個彈出的是第一個操作數。執行算術運算后,將結果壓到操作數棧中。
?
轉載于:https://www.cnblogs.com/xiongxueqi/p/8612085.html
總結
以上是生活随笔為你收集整理的使用栈实现中缀表达式转为后缀表达式和后缀表达式的求解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Visio软件的宏编写Java代码
- 下一篇: html转pdf分页问题