请将【算法5-1】和【算法5-2】中(1)至(7)处补充完整。 请从下面的选项中选择相应的判断逻辑填补【算法5-2】中的“判断条件1”至“判断条件3”。注意,若“判断条件2”的逻辑判断结果为假,就无须对“判断条件3”进行判断。 (a) 字符是括号

admin2009-05-15  44

问题 请将【算法5-1】和【算法5-2】中(1)至(7)处补充完整。
请从下面的选项中选择相应的判断逻辑填补【算法5-2】中的“判断条件1”至“判断条件3”。注意,若“判断条件2”的逻辑判断结果为假,就无须对“判断条件3”进行判断。
   (a) 字符是括号  (b) 字符是左括号    (c) 字符是右括号    (d) 栈空
   (e) 栈不空    (f) 栈顶元素表示的是与当前字符匹配的左括号
   (g) 栈顶元素表示的是与当前字符匹配的右括号

选项

答案判断条件1:b 判断条件2:e 判断条件3:f

解析 本题用伪代码描述算法。算法的功能是检查文本文件中的括号(圆括号、方括号、花括号)是否匹配,不匹配的话给出相应信息,通过栈来实现。
   括号匹配的原则是把最近的左、右括号配成一对,因此常借助栈来实现:遇左括号入栈,遇右括号出栈,出栈的左括号与当前右括号是匹配的;若遇右括号而栈空,则说明当前右括号缺少左括号。当文件结束后,不可能再有右括号了,若栈非空,则说明栈中的左括号没有对应的右括号。程序还希望给出出错括号的位置(行号和列号),因此左括号入栈的同时还需要记录其所在的行号和列号。
   算法5-1只能处理圆括号的匹配判断。空(1)所在的if块是两个push语句,说明进行的是入栈操作,根据上面的匹配过程说明,条件应该是当前处理的字符是左括号,根据kind函数返回值的说明,左括号返回值为1。故空(1)应填1。需要说明的是,这里左括号只有一种,括号本身不必入栈。
   空(1)和空(3)是两个入栈操作,应该是将当前左括号的行号row和列号col入栈,由于栈是后进先出LIFO,因此入栈顺序非常重要。根据下面的出栈操作:“row←pop(); col←pop();”,易得,空(2)应填col,空(3)应填row。
   类似空(1),空(4)所在的else-if块中,当栈非空时进行出栈操作,若栈空显示错误信息。根据上面的匹配过程说明,条件应该是当前处理的字符是右括号,根据king函数返回值的说明,右括号为2。故空(4)应填2。
   算法5-2改进了算法5-1,增加了括号的处理能力,还可以处理大括号和中括号,处理流程是一致的,不同的是,不同类型的括号只能与同类型的括号匹配,即右圆括号不能与左大括号匹配。左括号有3种,因此入栈时还需记录是哪种左括号。类似算法5-1,“判断条件1”应该为“字符是左括号”,“判断条件2 and判断条件3”应为“栈非空”且“栈顶元素是与当前字符匹配的左括号”。根据说明“若‘判断条件2’的逻辑判断结果为假,就无须对‘判断条件 3’进行判断”,“判断条件2”应为“栈非空”。
   根据出栈序列很容易得,空(5)为col,空(6)为row。空(7)稍有难度,因出栈序列中一直没用到,上面已经提到判断条件3是判断栈顶元素是甭是与当前字符匹配的左括号,因此应将括号类型入栈。kind函数是用来返回括号类型的,赋值给了k。故空(7)应填k。
转载请注明原文地址:https://jikaoti.com/ti/eca7FFFM
0

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