【发布时间】:2018-10-02 01:39:39
【问题描述】:
我有一个关于使用堆栈数据结构解决问题的分配问题。系统提示我创建以下堆栈函数。
任务:使用您创建的堆栈,编写函数prefix_infix,它接受一个前缀表达式(表示为一个列表)并以全括号中缀表示法返回表达式。考虑只涉及二元运算符的表达式(+,-,*,/) 您可以在此处找到有关前缀的信息:
http://en.wikipedia.org/wiki/Polish_notation
def make_stack():
stack=[]
def helper(*args):
if args[0]=='push':
stack.append(args[1])
elif args[0]=='peek':
return (stack[-1])
elif args[0]=="pop":
return (stack.pop())
elif args[0]=="size":
return (len(stack))
return helper
def prefix_infix(lst):
stk=make_stack()
def helper(lst):
if type(lst)==int:
stk('push',str(lst))
elif lst in ('+','-','*','/'):
left=stk('pop')
right=stk('pop')
element="("+left+" "+lst+" "+right+")"
stk('push',element)
else:
return helper(lst[2]),helper(lst[1]),helper(lst[0])
helper(lst)
return stk('pop')
prefix_infix(['+',['*',5,4],['-',2,1]])
#Output: "((5 * 4) + (2 - 1))"
prefix_infix(['-',['*',5,4],['-',['/',1,45],['+',1,1]]])
#Output:((5 * 4) - ((1 / 45) - (1 + 1)))
我不知何故让我的代码产生了正确的输出,但我对我的方法不是很有信心,因为我用递归做到了,但我不知道用递归做它的正确方法是什么(我的递归调用, 似乎很随意)。有人可以建议我可以编写一些其他版本的代码以使其更容易理解吗?我无法真正可视化堆栈,大多数时候我只是对递归函数感到幸运。
【问题讨论】:
-
您是在寻找代码优化还是其他方法?
-
也许是另一种方法,我对操作堆栈不太满意,我有点画出我需要做的事情然后编写代码,但似乎不太令人信服。