中綴表達式轉后綴表達式(Python實現)


中綴表達式轉后綴表達式

中綴表達式轉后綴表達式的規則:

1.遇到操作數,直接輸出; 
2.棧為空時,遇到運算符,入棧; 
3.遇到左括號,將其入棧; 
4.遇到右括號,執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出; 
5.遇到其他運算符’+”-”*”/’時,彈出所有優先級大於或等於該運算符的棧頂元素,然后將該運算符入棧; 
6.最終將棧中的元素依次出棧,輸出。 
經過上面的步驟,得到的輸出既是轉換得到的后綴表達式。 

代碼實現:

expression = "3+(6*7-2)+2*3"

def middle2behind(expresssion):  
    result = []             # 結果列表
    stack = []              #
    for item in expression: 
        if item.isnumeric():      # 如果當前字符為數字那么直接放入結果列表
            result.append(item) 
        else:                     # 如果當前字符為一切其他操作符
            if len(stack) == 0:   # 如果棧空,直接入棧
                stack.append(item)
            elif item in '*/(':   # 如果當前字符為*/(,直接入棧
                stack.append(item)
            elif item == ')':     # 如果右括號則全部彈出(碰到左括號停止)
                t = stack.pop()
                while t != '(':   
                    result.append(t)
                    t = stack.pop()
            # 如果當前字符為加減且棧頂為乘除,則開始彈出
            elif item in '+-' and stack[len(stack)-1] in '*/':
                if stack.count('(') == 0:           # 如果有左括號,彈到左括號為止     
                    while stack:
                        result.append(stack.pop())
                else:                               # 如果沒有左括號,彈出所有
                    t = stack.pop()
                    while t != '(':
                        result.append(t)
                        t = stack.pop()
                    stack.append('(')
                stack.append(item)  # 彈出操作完成后將‘+-’入棧
            else:
                stack.append(item)# 其余情況直接入棧(如當前字符為+,棧頂為+-)

    # 表達式遍歷完了,但是棧中還有操作符不滿足彈出條件,把棧中的東西全部彈出
    while stack:
        result.append(stack.pop())
    # 返回字符串
    return "".join(result)


print(middle2behind(expression))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM