早教吧 育儿知识 作业答案 考试题库 百科 知识分享

A-B*(C-D)的栈深怎么算?答案是4,但是我不会算,求解利用栈求表达式的值时,设立运算数栈OPEN.假设OPEN只有两个存储单元,则在下列表达式中,不会发生溢出的是()以上表达式是其中的A选项

题目详情
A-B*(C-D)的栈深怎么算?答案是4,但是我不会算,求解
利用栈求表达式的值时,设立运算数栈OPEN.假设OPEN 只有两个存储单元,则在下列表达式中,
不会发生溢出的是()以上表达式是其中的A选项
▼优质解答
答案和解析
运算符栈和数据栈共同实现:
从左至右扫描表达式,遇到操作数就放入数据栈,遇到运算符,需要进行比较,如果比栈顶运算符优先级低,就弹栈,并从数据栈弹出两个数据,运算后再作为数据压入数据栈,否则压栈.遇到左括号,直接压栈,遇到右括号,弹栈进行运算,直到弹出的运算符是左括号.最后扫描完了,不断弹栈,直到为空栈.
因此,如上A-B*(C-D),
数据栈(DS)和运算符栈(OS)如下过程:
DS OS
1:A -
2:B *
A -
3:B (
A *
-
4:C -
B (
A *
-
5:D -
C (
B *
A -
6:此时遇到右括号,弹栈,以下C-D的值表示为E
E (
B *
A -
7:
E *
B -
A
然后弹栈计算F = B*E
再计算A-F
从上面过程可以看出,运算符的栈,最深为4.