python数据结构 栈的实例 表达式转换 中缀转前缀后缀
Posted allmenmustdie123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据结构 栈的实例 表达式转换 中缀转前缀后缀相关的知识,希望对你有一定的参考价值。
# 栈的应用 表达式转换 中缀转前缀(包括字符: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数据结构 栈的实例 表达式转换 中缀转前缀后缀的主要内容,如果未能解决你的问题,请参考以下文章