python数据结构 栈的实例 表达式转换 中缀转前缀后缀
2020-12-24 21:28
标签:字典 实例化 ima 反转 import 分割 中缀转后缀 pop 空格 运行结果 运行结果 python数据结构 栈的实例 表达式转换 中缀转前缀后缀 标签:字典 实例化 ima 反转 import 分割 中缀转后缀 pop 空格 原文地址:https://www.cnblogs.com/liuchaodada/p/13209856.html# 栈的应用 表达式转换 中缀转前缀(包括字符:26个大写字母、10个数字、(、)、+、-、*、/)
from pythonds.basic.stack import Stack
def infixToPrefix(infix):
prec = {} #设置操作符优先级字典
prec[‘*‘] = 3
prec[‘/‘] = 3
prec[‘+‘] = 2
prec[‘-‘] = 2
prec[‘)‘] = 1
opStack = Stack() #实例化栈类
prefixList = [] #用于保存转换完成后的字符列表
tokenList = infix[::-1].split() #以空格分割待转换的反转字符串
for token in tokenList:
if token in ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘: #如果为字母或数字,则
prefixList.append(token) #添加到最终列表
elif token == ‘)‘:
opStack.push(token) #将")"入栈
elif token == ‘(‘:
topToken = opStack.pop() #出栈
while topToken != ‘)‘: #若该出栈元素为运算符,则
prefixList.append(topToken) #因该运算符位于()中,具有更高的优先级,则将运算符添加到最终列表
topToken = opStack.pop() #继续出栈,直到为与"("对应的")"
else:
#若栈不为空,且栈顶元素的优先级>=运算符的优先级(表明栈顶元素也是运算符,这2个运算符相邻)
while (not opStack.isEmpty()) and (prec[opStack.peek()] >= prec[token]):
prefixList.append(opStack.pop()) #将栈顶元素(比当前运算符具有更高优先级)添加到最终列表
opStack.push(token) #该运算符入栈
while not opStack.isEmpty(): #对比完后,栈仍不为空,则
prefixList.append(opStack.pop()) #将栈内剩余元素添加到最终列表
return " ".join(prefixList) #将最终列表组合成最终字符串
print(infixToPrefix("( A + B ) * ( C + D ) * ( E + F )") )
# 栈的应用 表达式转换 中缀转后缀(包括字符:26个大写字母、10个数字、(、)、+、-、*、/)
from pythonds.basic.stack import Stack
def infixToPostfix(infix):
prec = {} #设置操作符优先级字典
prec["*"] = 3
prec["/"] = 3
prec["+"] = 2
prec["-"] = 2
prec["("] = 1
opStack = Stack() #实例化栈类
postfixList = [] #用于保存转换完成后的字符列表
tokenList = infix.split() #以空格分割待转换字符串
for token in tokenList:
if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789": #如果为字母或数字,则
postfixList.append(token) #添加到最终列表
elif token == ‘(‘:
opStack.push(token) #将"("入栈
elif token == ‘)‘:
topToken = opStack.pop() #出栈
while topToken != ‘(‘: #若该出栈元素为运算符,则
postfixList.append(topToken) #因该运算符位于()中,具有更高的优先级,则将运算符添加到最终列表
topToken = opStack.pop() #继续出栈,直到为与")"对应的"("
else: #如果为运算符,则
#若栈不为空,且栈顶元素的优先级>=运算符的优先级(表明栈顶元素也是运算符,这2个运算符相邻)
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 ) * ( E + F )‘))
文章标题:python数据结构 栈的实例 表达式转换 中缀转前缀后缀
文章链接:http://soscw.com/index.php/essay/38008.html