填充流程图中①的判断条件。 中缀表达式(A+B-C*D)*(E-F)/G经该流程图处理后的输出是什么?

admin2009-05-15  29

问题 填充流程图中①的判断条件。
中缀表达式(A+B-C*D)*(E-F)/G经该流程图处理后的输出是什么?

选项

答案AB+CD*-EP-*G/

解析 流程图中借助栈S[](其实是数组,栈顶p指向最后一个元素),相应的栈操作如下。进栈:p+1→p、入栈元素→S[p]:出栈:S[p]→栈元素变量、p-1→p:栈空条件:p=0。
   流程图中采用了3个下标变量k、p、i,容易判断i是输入数组IN[]的下标,k是输出数组 POLISH[]的下标,p是栈S[]的栈顶下标。
   整个循环结束的条件是遇到空格字符,即表示中缀表达式结束。然后根据S的不同进行不同的操作。
   ①是变量,则将变量保存到输出数组中。
   ②是左括号,则调用A(A未知,这正是难点所在)。
   ③是右括号,则循环调用B,直到栈顶元素是左括号,意味着需要修改栈顶指针;将p-1→P,即进行一次出栈操作,但不关心栈顶元素,其实此时栈顶元素就是左括号。
   ④是运算符,首先判断栈是否为空,若空则直接调用A;若非空,则进行某种大小比较(判定(1),这里容易想到是进行优先级比较),当小于等于时调用B,继续判断下一个栈顶元素,否则调用A。
   从对右括号的处理可得,左括号一定要入栈,也就是说A一定包含左括号入栈操作;B含义出栈操作,栈顶元素做何种处理待定。再结合输出结果前的一个循环:循环调用B直到栈空。如果输入中缀式正确的话,此时栈中不可能含有括号,只可能含有运算符,因此应该是将剩余运算符送入输出数组POLISH[]中。这就是对栈顶元素的处理。
   判定(1)猜想是进行优先级比较:将当前运算符与栈顶元素进行比较,若当前元素优先级高(>),则不出栈,将当前运算符入栈;否则(≤),出栈并处理栈顶元素,再将当前运算符入栈。
   至于[问题4],则比较容易,只要知道后缀式的含义就能解答。
转载请注明原文地址:https://kaotiyun.com/show/X5xZ777K
0

相关试题推荐
最新回复(0)