可利用一个栈来检查表达式中的括号是否匹配,其方法是:初始时设置栈为空,然后从左到右扫描表达式,遇到左括号“(”就将其入栈,遇到右括号“)”就执行出栈操作,忽略其他符号。在检查表达式“a*(b+c))-d”时,由于( ),因此可判断出该表达式中的括号不匹配。

题目
可利用一个栈来检查表达式中的括号是否匹配,其方法是:初始时设置栈为空,然后从左到右扫描表达式,遇到左括号“(”就将其入栈,遇到右括号“)”就执行出栈操作,忽略其他符号。在检查表达式“a*(b+c))-d”时,由于( ),因此可判断出该表达式中的括号不匹配。

A.需要进行出栈操作但栈已空
B.需要进行入栈操作但栈已满
C.表达式处理已结束,但栈中仍留有字符“(”
D.表达式处理已结束,但栈中仍留有字符")”
参考答案和解析
答案:A
解析:
第二个右括号要执行出栈操作,但没有对应的左括号可执行出栈。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

阅读以下算法说明和C程序,根据要求回答问题1至问题2。

[说明]

[算法4-1]的功能是:用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如图4-18所示。

在[算法4-1]中,stack为一整数栈。算法中各函数的说明如表4-16所示。

[算法4-1] 将栈stack置空,置EOF为false

为了识别更多种类的括号,对[算法4-1]加以改进后得到[算法4-2]。[算法4-2]能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(charch)的参数及其对应的返回值如表4-17所示。

[算法4-2]

[问题1]

请将[算法4-1]和[算法4-2]中,(1)~(7)空缺处的内容补充完整。

[问题2]

请从以下选项中选择相应的判断逻辑填补[算法4-2]中的“判断条件1”至“判断条件3”。注意,若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断。

判断条件1: (8)

判断条件2: (9)

判断条件3: (10)

[供选择的答案]

A.栈顶元素表示的是与当前字符匹配的左括号

B.栈顶元素表示的是与当前字符匹配的右括号

C.字符是左括号 D.字符是右括号 E.栈不空 F.栈空

G.字符是括号


正确答案:这是一道要求读者用创建Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。 通常把限定只能在一端进行插入和删除操作的线性表称为栈所以栈又称为运算受限的线性表。把可以进行插入和删除操作的一端称为栈顶(习惯用top指针指示)而另一端称之为栈底。当栈中不包含任何数据元素时这个栈就为空栈。 由于栈具有“后进先出”的运算特点因此在程序设计中应用十分广泛。例如进制转换、括号匹配的检验、表达式求值以及迷宫求解等。 [算法4-1]的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号则给出图4-18所示的提示信息。从图4-18所给出的信息可知程序不但要求检查出是否有括号匹配错误而且还需给出具体错在哪个括号。通常括号匹配的规则是把最近的左右括号配成一对所以括号匹配最常用的方法是遇到左括号则入栈遇到右括号就出栈。这样出栈的左括号与当前的右括号是匹配的。 [算法4-1]分析: ①栈置空置EOF为FALSE并从文件中读取第一个字符到ch然后进入循环。循环体执行一次处理一个ch。进入循环利用kind函数算出ch的类型k。 ②虽然[算法4-1]中有(1)~(4)空缺处但其基本结构却很明显大致流程如下。 当k等于什么的时候把什么入栈; 当k等于什么的时候且栈不为空的时候进行出栈操作。如果栈为空则打印错误信息;如果都不是则读文件的下一个字符再次进入循环。 根据以上所提及的算法可知入栈操作应该发生在类型k为1(即ch为左括号)时而出栈操作应该发生在类型k为2(即ch为右括号)时。因此(1)空缺处所填写的内容是“1”(4)空缺处所填写的内容是“2”。 由于在(4)空缺处之后的出栈操作中并没有用到栈的内容。因此可能有些读者理所当然地认为栈中的内容没有什么用可以在(2)、(3)空缺处随便压个ch即两个空缺处所填写“ch”。但换个角度思考从逻辑上就可以推翻这种解答。如果(2)、(3)空缺处压的是同样的数据又是在同一位置出栈算法大可只用一个PUSH、POP就可以了。 由语句“row-pop();col-pop();”可知(2)、(3)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col且根据栈的“后进先出”操作规则可知应先将col压入栈再压入row。因此 (2)空缺处所填写的内容是“col”(3)空缺处所填写的内容是“row"。 [算法4-2]分析: 同理由[算法4-2]中的语句“row-pop();col-pop();”可知(5)、(6)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col因此应先将col压入栈再压入row即(5)空缺处所填写的内容是“col”(6)空缺处所填写的内容是“row”。 由于判断条件1为真时需要进行入栈操作因此判断条件1应是判断字符是不是左括号如果是就入栈即(8)空缺处应选择选项C的“字符是左括号”。 判断条件2和判断条件3是相关联的当两个判断条件都为真时要进行出栈操作因此要判断栈是否为空。由此可以得出在判断条件2和判断条件3中至少有一个必定是用来判断栈是否为空的。可以用判断栈顶元素来确定当前括号是否和栈中压入括号是同一类型的但前提是左括号类型入了栈而且要在栈顶。如果(7)空缺处压入的是k则正好符合这一条件。所以(7)空缺处所填写的内容是“k”。 同时判断括号是否匹配的条件也就可以确定了如果当前ch是右括号且当前栈顶的左括号(只有左括号入了栈)类型与ch匹配则匹配成功。根据试题说明中的提示信息:若“判断条件2”的逻辑判断结果为假就无需对“判断条件3”进行判断所以应把“栈不空”作为判断条件2“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3即(9)空缺处应选择选项E的“栈不空”(10)空缺处应选择选项A的“栈顶元素表示的是与当前字符匹配的左括号”。
这是一道要求读者用创建Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。 通常把限定只能在一端进行插入和删除操作的线性表称为栈,所以栈又称为运算受限的线性表。把可以进行插入和删除操作的一端称为栈顶(习惯用top指针指示),而另一端称之为栈底。当栈中不包含任何数据元素时,这个栈就为空栈。 由于栈具有“后进先出”的运算特点,因此在程序设计中应用十分广泛。例如,进制转换、括号匹配的检验、表达式求值以及迷宫求解等。 [算法4-1]的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出图4-18所示的提示信息。从图4-18所给出的信息可知,程序不但要求检查出是否有括号匹配错误,而且还需给出具体错在哪个括号。通常,括号匹配的规则是把最近的左右括号配成一对,所以括号匹配最常用的方法是遇到左括号则入栈,遇到右括号就出栈。这样,出栈的左括号与当前的右括号是匹配的。 [算法4-1]分析: ①栈置空,置EOF为FALSE,并从文件中读取第一个字符到ch,然后进入循环。循环体执行一次处理一个ch。进入循环,利用kind函数算出ch的类型k。 ②虽然[算法4-1]中有(1)~(4)空缺处,但其基本结构却很明显,大致流程如下。 当k等于什么的时候把什么入栈; 当k等于什么的时候且栈不为空的时候,进行出栈操作。如果栈为空,则打印错误信息;如果都不是,则读文件的下一个字符再次进入循环。 根据以上所提及的算法可知,入栈操作应该发生在类型k为1(即ch为左括号)时,而出栈操作应该发生在类型k为2(即ch为右括号)时。因此(1)空缺处所填写的内容是“1”,(4)空缺处所填写的内容是“2”。 由于在(4)空缺处之后的出栈操作中,并没有用到栈的内容。因此可能有些读者理所当然地认为栈中的内容没有什么用,可以在(2)、(3)空缺处随便压个ch,即两个空缺处所填写“ch”。但换个角度思考,从逻辑上就可以推翻这种解答。如果(2)、(3)空缺处压的是同样的数据,又是在同一位置出栈,算法大可只用一个PUSH、POP就可以了。 由语句“row-pop();col-pop();”可知,(2)、(3)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col,且根据栈的“后进先出”操作规则可知,应先将col压入栈,再压入row。因此 (2)空缺处所填写的内容是“col”,(3)空缺处所填写的内容是“row"。 [算法4-2]分析: 同理,由[算法4-2]中的语句“row-pop();col-pop();”可知,(5)、(6)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col,因此应先将col压入栈,再压入row,即(5)空缺处所填写的内容是“col”,(6)空缺处所填写的内容是“row”。 由于判断条件1为真时,需要进行入栈操作,因此判断条件1应是判断字符是不是左括号,如果是就入栈,即(8)空缺处应选择选项C的“字符是左括号”。 判断条件2和判断条件3是相关联的,当两个判断条件都为真时,要进行出栈操作,因此要判断栈是否为空。由此可以得出在判断条件2和判断条件3中,至少有一个必定是用来判断栈是否为空的。可以用判断栈顶元素来确定当前括号是否和栈中压入括号是同一类型的,但前提是左括号类型入了栈,而且要在栈顶。如果(7)空缺处压入的是k,则正好符合这一条件。所以(7)空缺处所填写的内容是“k”。 同时,判断括号是否匹配的条件也就可以确定了,如果当前ch是右括号且当前栈顶的左括号(只有左括号入了栈)类型与ch匹配,则匹配成功。根据试题说明中的提示信息:若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断,所以应把“栈不空”作为判断条件2,“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3,即(9)空缺处应选择选项E的“栈不空”,(10)空缺处应选择选项A的“栈顶元素表示的是与当前字符匹配的左括号”。

第2题:

阅读以下说明和C函数,将(1)~(5)空缺处的字句填写完整。

[说明]

计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*120-37)”的后缀表达式形式为“46 5 120 37-*+”。

计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5 120 37-*+”的计算过程如下:

a.依次将46、5、120、37压入栈中;

b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中;

c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;

d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;

e.表达式结束,则计算过程完成。

函数computing(char expr[],int*result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。

函数computing中所用栈的基本操作的函数原型说明如下。

● void InitStack(STACK*s):初始化栈。

● void Push(STACK*s,int e):将一个整数压栈,栈中元素数目增1。

● void Pop(STACK*s):栈顶元素出栈,栈中元素数目减1。

● int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。

● int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。

[C函数]


正确答案:是一道考查栈结构在后缀表达式求值过程中应用的分析题。利用栈计算后缀表达式时从左至右扫描后缀表达式:若遇到运算对象则压入栈中;遇到运算符则从栈中弹出对应数目的运算对象进行计算并将运算结果压入栈中。重复以上过程直到后缀表达式扫描结束最后栈顶就是表达式的计算结果。 根据题干中的说明由于后缀表达式以字符串方式存储且以空格分隔符号(数值、算符)因此遇到空格字符时指向表达式中字符的指针ptr应增加1指向后续字符因此(1)空缺处应填入“ptr++”或其等价形式。下面以字符串“375”为例说明将一个数字串转换为数值的过程。 数值375=((0×10+3)×10+7)×10+5 (1)取得数字字符“3”(ASCII码值为51字符0的ASCII码值为48)。 (2)取得数字字符“7” (ASCII码值为55)。 (3)取得数字字符“5” (ASCII码值为53)。 以下程序代码用于将一个数字字符串转换为对应的整数存入tnum显然tnum的初始值应为0。 因此(2)空缺处应填入“0”。对于(3)空缺所在表达式的功能是:将数字字符转换为数值因此 (3)空缺处填入“*ptr-48”。 (4)空缺处用于将转换所得的数值tnum压入栈顶根据题目中Push的原型“void Push(STACK*sint e)”调用时第一个实际参数是STACK类型变量的地址第二个实际参数是一个整数因此(4)空缺处填入“&stnum”。 由于函数computing(char expr[]int*result)通过参数result返回该表达式的值因此需要将存在栈顶的运算结果赋值给result指向的整型变量即(5)空缺处填入“*result”。 本试题目还考查了参数传递知识读者可通过上机实践加强基本概念的理解以及C程序设计能力的培养。
是一道考查栈结构在后缀表达式求值过程中应用的分析题。利用栈计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出对应数目的运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束,最后栈顶就是表达式的计算结果。 根据题干中的说明,由于后缀表达式以字符串方式存储且以空格分隔符号(数值、算符),因此遇到空格字符时,指向表达式中字符的指针ptr应增加1指向后续字符,因此,(1)空缺处应填入“ptr++”或其等价形式。下面以字符串“375”为例说明将一个数字串转换为数值的过程。 数值375=((0×10+3)×10+7)×10+5 (1)取得数字字符“3”(ASCII码值为51,字符0的ASCII码值为48)。 (2)取得数字字符“7” (ASCII码值为55)。 (3)取得数字字符“5” (ASCII码值为53)。 以下程序代码用于将一个数字字符串转换为对应的整数存入tnum,显然,tnum的初始值应为0。 因此,(2)空缺处应填入“0”。对于(3)空缺所在表达式的功能是:将数字字符转换为数值,因此 (3)空缺处填入“*ptr-48”。 (4)空缺处用于将转换所得的数值tnum压入栈顶,根据题目中Push的原型“void Push(STACK*s,int e)”,调用时第一个实际参数是STACK类型变量的地址,第二个实际参数是一个整数,因此,(4)空缺处填入“&s,tnum”。 由于函数computing(char expr[],int*result)通过参数result返回该表达式的值,因此需要将存在栈顶的运算结果赋值给result指向的整型变量,即(5)空缺处填入“*result”。 本试题目还考查了参数传递知识,读者可通过上机实践加强基本概念的理解,以及C程序设计能力的培养。

第3题:

判断一个表达式中左右括号是否匹配,采用栈实现较为方便。()

此题为判断题(对,错)。


参考答案:√

第4题:

判断一个表达式中左右括号是否匹配,采用(36)实现较为方便。

A.线性表的顺序存储

B.队列

C.线性表的链式存储

D.栈


正确答案:D
解析:在高级语言的编译阶段,从头到尾扫描来语句,检验括号是否匹配的方法可用“期待的急迫程度”来描述,这需要一个栈来帮助实现。即每读到一个括号,若是右括号,则或者使置于栈顶的最急迫的期待得以消解,或者是不合法的情况;若是左括号,则作为一个新的更急迫期待压入栈中,自然使原有的在栈中的所有未消解的期待的急迫性都降了一级。这是栈的一个典型应用。

第5题:

可利用一个栈来检查表达式中的括号是否匹配,其方法是:初始时设置栈为空,然后从左到右扫描表达式,遇到左括号“(”就将其入栈,遇到右括号“)”就执行出栈操作,忽略其他符号。对于算术表达式“a*(b+c))d”,由于(),因此可判断出该表达式中的括号不匹配。

A、需要进行出栈操作但栈已空

B、需要进行入栈操作但栈已满

C、表达式处理已结束,但栈中仍留有字符“(”

D、表达式处理已结束,但栈中仍留有字符“)”


正确答案:A

第6题:

请从以下选项中选择相应的判断逻辑填写【算法4-2】中的“判断条件1”至“判断条件3”。注意,如“判断条件2”的逻辑判断结果为假,则无须对“判断条件3”进行判断。 判断条件1:(8) 判断条件2:(9) 判断条件3:(10) 【供选择的答案】A.栈顶元素表示的是与当前字符匹配的左括号

B.栈顶元素表示的是与当前字符匹配的右括号

C.字符是左括号

D.字符是右括号

E.栈不空F.栈空G.字符是括号


正确答案:(8)C或字符是左括号 (9)E或栈不空 (10)A或栈顶元素的是与当前字符匹配的左括号
(8)C或字符是左括号 (9)E或栈不空 (10)A或栈顶元素的是与当前字符匹配的左括号 解析:这是一道要求读者用创建Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。
通常把限定只能在一端进行插入和删除操作的线性表称为栈,所以栈又称为运算受限的线性表。把可以进行插入和删除操作的一端称为栈顶(习惯用top指针指示),而另一端称为栈底。当栈中不包含任何数据元素时,这个栈就为空栈。
由于栈具有“后进先出”的运算特点,因此在程序设计中应用十分广泛。例如进制转换、括号匹配的检验、表达式求值及迷宫求解等。
【算法4-1】的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出图1-18所示的提示信息。从图1-18给出的信息可知,程序不但要求检查出是否有括号匹配错误,而且还需要给出具体的出错位置。通常,括号匹配的规则是把最近的左右括号配成一对,所以括号匹配最常用的方法是遇到左括号则入栈,遇到右括号则出栈。这样,出栈的左括号与当前的右括号是匹配的。
【算法4-1】分析:
1)栈置空,置EOF为FALSE,并从文件中读取第一个字符到ch,然后进入循环。循环体执行一次处理一个ch。进入循环,利用kind函数算出ch的类型k。
2)虽然【算法4-1】中有(1)~(4)空缺处,但其基本结构却很明显,大致流程如下。
当k等于什么的时候把什么入栈;
当k等于什么且栈不为空的时候,进行出栈操作。如果栈为空,则打印错误信息:如果都不是,则读文件的下一个字符再次进入循环。
根据以上所提到的算法可知,入栈操作应该发生在类型A为1(即ch为左括号)时,而出栈操作应该发生在类型A为2(即ch为右括号)时。因此(1)空缺处所填写的内容是“1”,(4)空缺处所填写的内容是“2”。
由于在(4)空缺处之后的出栈操作中,并没有用到栈的内容。因此可能有些读者理所当然地认为栈中的内容没有什么用,可以在(2)、(3)空缺处随便压个ch,即两个空缺处均填写“ch”。但换个角度思考,从逻辑上就可以推翻这种解答。如果(2)、(3)空缺处压的是同样的数据,又是在同一位置出栈,算法大可只用一个push、pop就可以了。
由语句“row-pop();col-pop();”可知,(2)、(3)空缺处应该把row和col压入堆栈。由于是先弹出FOW后弹出col,并且根据栈的“后进先出”规则可知,应先将col压入栈,再压入row。因此 (2)空缺处所填写的内容是“col”,(3)空缺处所填写的内容是“row”。
【算法4-2】分析:
同理,由【算法4-2】中的语句“row-pop根据栈的“后进先出”规则可知,();col-pop():”可知, (5)、(6)空缺处应该把row和col压入堆栈。应先将col压入栈,再压入row,即(5)空缺处所填写的内容是“col”,(6)空缺处所填写的内容是“row”。
由于判断条件1为真时,需要进行入栈操作,因此判断条们:1应是判断字符是不是左括号,如果是就入栈,即(8)空缺处应选择选项C的“字符是左括号”。
判断条件2和判断条件3是相关联的,当两个判断条件都为真时,要进行出栈操作,因此要判断栈是否为空。由此可以得出在判断条件2和判断条件3中,至少有一个必定是用来判断栈是否为空的。可以用判断栈顶元素来确定当前括号是否和栈中压入括号是同一类型的,但前提是左括号类型入了栈,而且要在栈顶。如果(7)空缺处压入的是k,则正好符合这一条件。所以(7)空缺处所填写的内容是“k”。
同时,判断括号是否匹配的条件也就可以确定了,如果当前ch是右括号且当前栈顶的左括号(只有左括号入了栈)类型与ch匹配,则匹配成功。根据试题说明中的提示信息:若“判断条件2”的逻辑判断结果为假,就无须对“判断条件3”进行判断,所以应把“栈不空”作为判断条件2,“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3,即(9)空缺处应选择选项E的“栈不空”,(10)空缺处应选择选项A的“栈顶元素表示的是与当前字符匹配的左括号”。

第7题:

判断一个表达式中左右括号是否匹配,采用______实现较为方便。

A.线性表的顺序存储

B.队列

C.线性表的链式存储

D.栈


正确答案:D
解析:判断一个表达式中的左右括号是否匹配,一般使用的算法是从左至右扫描表达式,碰到左括号,就将其压入一个堆栈,碰到右括号,就到堆栈中弹出一个左括号,并判断两个括号类型是否一致。就这样,如果碰到要弹出左括号时堆栈为空,或者两个括号类型不一致,或者扫描完整个表达式堆栈不为空,则均可断定表达式中存在括号不匹配的情况。所以,本题应采用的数据结构是栈,选项D为正确答案。

第8题:

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

A.栈为空却要进行出栈操作

B.栈已满却要进行入栈操作

C.表达式处理已结束,栈中仍留有字符“(”

D.表达式处理已结束,栈中仍留有字符“)”


正确答案:A
解析:对算术表达式(a+b*(a+b))/c)+(a+b)进行括号检查时,栈操作的顺序为:
         入栈,入栈,出栈,出栈,出栈,……
  当需要进行第三次出栈操作时,发现栈已空,已不可能完成出栈操作。
  对算术表达式((a+b/(a+b)-c/a)/b进行括号检查时,栈操作的顺序为:
          入栈,入栈,入栈,出栈,出栈
  第1次出栈操作取出的是第3次刚入栈的“(”,第2次出栈操作取出的是第2次入栈的“(”。直到表达式检查结束,第1次入栈的“(”仍没有取出,因此,表达式中的括号并不匹配。
  本例是栈的重要应用之例。编译程序中常用栈来检查语句(或程序)中的括号是否匹配。
  在日常生活中,当人们进入一个复杂的大院时,需要多次进门,多次出门。每次出门,总是退出最近进门的院。在同一位置堆积货物时,总是先取最近刚放上的货。所以,栈的应用也是比较常见的。可以用这种日常生活中的例子来形象地理解栈的操作。

第9题:

从下面的选项中选择相应的判断逻辑填补[算法2-2]中的“判断条件1”至“判断条件 3”。注意,若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断。

(a)字符是括号(b)字符是左括号(c)字符是右括号(d)栈空(e)栈不空

(f)栈顶元素表示的是与当前字符匹配的左括号

(g)栈顶元素表示的是与当前字符匹配的右括号


正确答案:判断条件1:(b) 判断条件2:(e) 判断条件3:(f)
判断条件1:(b) 判断条件2:(e) 判断条件3:(f) 解析:因为判断条件1为真时要人栈,所以判断条件1应是判断字符是否是左括号,如果是就入栈。所以判断条件1选b。
判断条件2和3是联系在一起的,当判断条件2和3都为真时,要进行出栈操作,因此要判断栈是否为空。由此可以得出判断条件2和3中,有一个是用来判断栈是否为空的。
备选答案的一些选项给了一些提示,就是用判断栈顶元素,来确定当前括号是否和栈中压人括号是同一类型的。但前提是左括号类型入了栈,而且要在栈顶,如果(7)空压入的是k,就正好吻合了。所以(7)空应填k,判断括号是否匹配的条件也就可以确定了。如果当前ch是右括号且当前栈顶的左括号(只有左括号入了栈)类型与ch匹配,则匹配成功。因为在题目中有提示“若判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断。所以应把“栈不空”作为判断条件2,“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3。即判断条件2填e,判断条件3填f。

第10题:

在判断表达式中括号是否匹配的算法中,采用( )数据结构最佳。

A.线性表的顺序存储结构

B.线性表的链式存储结构

C.广义表

D.栈


正确答案:D

更多相关问题