Python使用栈将中序转后序(代码)
生活随笔
收集整理的這篇文章主要介紹了
Python使用栈将中序转后序(代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里使用字母來表示數字
# 從中序表達式到后序表達式的轉換 # string模塊中定義了一些常用的屬性(包含所有數字,字母,可打印的所有ascii碼等) from pythonds.basic import Stack # 引入棧 import stringdef infix_to_postfix(infix_expr):prec = {} # 用字典存優先級# precedence優先;優先權prec["*"] = 3prec["/"] = 3prec["+"] = 2prec["-"] = 2prec["("] = 1op_stack = Stack()# 實例化一個棧postfix_list = []# 建一個列表用于存放字母# token_list = infix_expr.split()token_list = list(infix_expr)# 將傳入的字符進行切片存入列表for token in token_list: # 依次取出列表的內容if token in string.ascii_uppercase:# string.ascii_uppercase代表'ABCDEFGHIJKLMNOPQRSTUVWXYZ'postfix_list.append(token) # 將字母加入列表elif token == '(':op_stack.push(token) # 入棧elif token == ')':top_token = op_stack.pop() # 將最上端出棧同時存入到top_token中while top_token != '(': # 如果沒有匹配成功,應該就是運算符postfix_list.append(top_token) # 將運算符加入列表top_token = op_stack.pop() # 再取出最上端出棧同時存入到top_token中else:while (not op_stack.isEmpty()) and (prec[op_stack.peek()] >= prec[token]):# 如果棧內有東西并且棧頂端的優先級大于等于當前讀入的token的優先級postfix_list.append(op_stack.pop())# 將棧內的頂端出棧并且存入列表op_stack.push(token)# token入棧while not op_stack.isEmpty(): # 如果棧不是空的postfix_list.append(op_stack.pop())# 將棧內的東西出棧添加在列表后面return " ".join(postfix_list) # 將列表各元素用空格拼接print(infix_to_postfix("(A+B)*(C+D)")) print(infix_to_postfix("(A+B)*C")) print(infix_to_postfix("(A+(B+D)*E)*C"))下面使用數字來實現
from pythonds.basic import Stackdef infix_to_postfix(infix_expr):prec = {}prec["*"] = 3prec["/"] = 3prec["+"] = 2prec["-"] = 2prec["("] = 1op_stack = Stack()postfix_list = []# tokenList = infixexpr.split()token_list = list(infix_expr)numb = 0for token in token_list:if token in "0123456789":numb = numb * 10 + int(token) # 這里針對多位數else:if numb != 0:postfix_list.append(numb)numb = 0if token == '(':op_stack.push(token)elif token == ')':top_token = op_stack.pop()while top_token != '(':postfix_list.append(top_token)top_token = op_stack.pop()else:while (not op_stack.isEmpty()) and (prec[op_stack.peek()] >= prec[token]):postfix_list.append(op_stack.pop())op_stack.push(token)while not op_stack.isEmpty():postfix_list.append(op_stack.pop())# return postfix_listreturn " ".join(postfixList)總結
以上是生活随笔為你收集整理的Python使用栈将中序转后序(代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python控制机械臂6轴_在ROS环境
- 下一篇: 在线提取视频中的字幕(亲测有效)