日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python使用栈将中序转后序(代码)

發布時間:2024/3/24 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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使用栈将中序转后序(代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。