可以用栈来检查算术表达式中的括号是否匹配。分析算术表达式时,初始栈为空,从左到右扫描字符,遇到字符“(”就将其入栈,遇到“)”就执行出栈操作。对算术表达式“(a+b*(a+b))/c)+(a+b)”,检查时,(1);对算术表达式“((a+b/(a+b)-c

admin2019-04-09  18

问题 可以用栈来检查算术表达式中的括号是否匹配。分析算术表达式时,初始栈为空,从左到右扫描字符,遇到字符“(”就将其入栈,遇到“)”就执行出栈操作。对算术表达式“(a+b*(a+b))/c)+(a+b)”,检查时,(1);对算术表达式“((a+b/(a+b)-c/a)/b”,检查时,(2)。这两种情况都表明所检查的算术表达式括号不匹配。


选项 A、栈为空却要进行出栈操作
B、栈已满却要进行入栈操作
C、表达式处理已结束,栈中仍留下有字符“(”
D、表达式处理已结束,栈中仍留下有字符“)”

答案C

解析 栈是先进后出的线性表。
   对算术表达式“(a/b*(a+b))/c)+(a+b)”进行括号检查时,操作顺序为:
   ①遇到第1个左括号,进行入栈操作。栈中有1个左括号。
   ②遇到第2个左括号,进行入栈操作。栈中有2个左括号。
   ③遇到第1个右括号,进行出栈操作。栈中有1个左括号。
   ④遇到第2个右括号,进行出栈操作。栈中没有左括号。
   ⑤遇到第3个右括号,进行出栈操作。但此时为空栈,无法进行出栈操作。
   表达式检查结束。第1空的正确答案为选项A。
   对算术表达式“((a+b/(a+b)-c/a)几”进行括号检查时,操作顺序为:
   ①遇到第1个左括号,进行入栈操作。栈中有1个左括号。
   ②遇到第2个左括号,进行入栈操作。栈中有2个左括号。
   ③遇到第3个左括号,进行入栈操作。栈中有3个左括号。
   ④遇到第1个右括号,进行出栈操作。栈中有2个左括号。
   ⑤遇到第2个右括号,进行出栈操作。栈中有1个左括号。
   表达式检查结束。栈中依然还有左括号,表示表达式不匹配,第2空的正确答案为选项C。
转载请注明原文地址:https://jikaoti.com/ti/eDL7FFFM
0

最新回复(0)