我需要一些帮助来理解数据结构中堆栈的动态。
我有这个后缀符号:
a b c d * + 3 * + 5 6 2 c * + * +
评估将是:
a + 3b + 3cd + 30 + 10c
但是找出这个堆栈动态的算法是什么?
LE:谢谢各位同事帮助我理解它。
-> a, b, c, d
-> a, b c * d
-> a, b + c * d, 3
-> 3 * (b + c * d), a
-> 2 * c, 6, 5, a + (b + c * d) + 3
-> 5 * (6 + 2 * c), a + (b + c * d) + 3
-> a + (b + c * d) + 3 + 5 * (6 + 2 * c)
我看到以下是一些更正确的解释。我在这里做得很详细,如果其他人需要的话,我可以更容易理解。
答案 0 :(得分:2)
对于序列中的每个元素:
答案 1 :(得分:2)
有两个主要规则:
1)堆栈用abcd填充
a b c d
2)遇到*,弹出c和d,执行c * d并将结果推到堆栈上
a b cd
3)遇到+,计算b + cd
a b+cd
3)3被推入堆栈
a b+cd 3
遇到4)*并计算(b + cd)* 3 = 3b + 3cd
a 3(b+cd)
5)遇到+并计算+ 3(b + cd)
a+3(b+cd) (one element on the stack)
6)推出5,6,2,c
a+3(b+cd) 5 6 2 c
7)*遇到了
a+3(b+cd) 5 6 2*c
8)遇到+
a+3(b+cd) 5 6+2*c
9)*遇到了
a+3(b+cd) 5*(6+2*c)
10)遇到+
a+3(b+cd)+5*(6+2*c)
Grand-total是
a + 3b + 3cd + 30 + 10c
按预期
答案 2 :(得分:1)
堆栈进度为:
a b c d f g 3 h i 5 6 2 c j k m n
a b c b a g a i 5 6 2 6 5 i
a b a a i 5 6 5 i
a i 5 i
i
<强>其中:强>
f = d*c
g = d*c+b
h = 3*(d*c+b)
i = 3*(d*c+b)+a
j = c*2
k = c*2+6
m = (c*2+6)*5
n = (c*2+6)*5+3*(d*c+b)+a
鉴于所有操作都是二进制的,一般算法是:
如果元素是操作数,则将其推送(存储)到堆栈中。
如果元素是一个操作,则从堆栈中弹出(加载)两个最顶层的值,对它们执行操作,然后将结果推送(存储)到堆栈中。
< / LI>