可利用一个栈来检查表达式中的括号是否匹配,其方法是:初始时设置栈为空,然后从左到右扫描表达式,遇到左括号“(”就将其入栈,遇到右括号“)”就执行出栈操作,忽略其他符号。在检查表达式“a*(b+c))-d”时,由于( ),因此可判断出该表达式中的括号不匹配。A.需要进行出栈操作但栈已空 B.需要进行入栈操作但栈已满 C.表达式处理已结束,但栈中仍留有字符“(” D.表达式处理已结束,但栈中仍留有字符")”

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

A.需要进行出栈操作但栈已空
B.需要进行入栈操作但栈已满
C.表达式处理已结束,但栈中仍留有字符“(”
D.表达式处理已结束,但栈中仍留有字符")”

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

    阅读以下说明和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程序设计能力的培养。

  • 第2题:

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

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

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

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

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


    正确答案:A

  • 第3题:

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

    A.线性表的顺序存储

    B.队列

    C.线性表的链式存储

    D.栈


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

  • 第4题:

    设计算法判断一个算术表达式的圆括号是否正确配对。(提示:对表达式进行扫描,凡遇到'('就进栈,遇')'就退掉栈顶的'(',表达式被扫描完毕,栈应为空。


    正确答案:
    int PairBracket( char *SR)
    {//检查表达式ST中括号是否配对
    int i;
    SeqStack S; //定义一个栈
    InitStack (&s);
    for (i=0; i
    { if ( S[i]=='(' ) Push(&S, SR[i]); //遇'('时进栈
    if ( S[i]==')' ) //遇')'
    if (!StackEmpty(S))//栈不为空时,将栈顶元素出栈
    Pop(&s);
    else return 0;//不匹配,返回0
    }
    if EmptyStack(&s) return 1;// 匹配,返回1
    else return 0;//不匹配,返回0
    }

  • 第5题:

    若允许表达式内多种括号混合嵌套,则为检查表达式中括号是否正确配对的算法,通常选用的辅助结构是()。

    A.栈
    B.线性表
    C.队列
    D.二叉排序树

    答案:A
    解析:
    栈(stack)又称为堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素称作出栈或退栈,它是把栈顶元素删除,使其相邻的元素成为新的栈顶元素。

  • 第6题:

    数据结构里,栈是后进先出的线性结构,应用于表达式求值、括号匹配、进制转换等算法中帮助算法完成。


    正确答案:正确

  • 第7题:

    栈具有后进先出的特性,用途非常广泛,在()中要使用。

    • A、递归程序
    • B、表达式求值
    • C、汉诺塔问题
    • D、括号匹配

    正确答案:A,B,C,D

  • 第8题:

    括号匹配算法中,扫描到左括号要进栈,扫描到右括号要()。

    • A、出栈
    • B、进栈
    • C、不操作
    • D、以上都不对

    正确答案:A

  • 第9题:

    若允许表达式内多种括号混合嵌套,则为检查表达式中括号是否正确配对的算法,通常选用的辅助结构是()。

    • A、栈
    • B、线性表
    • C、队列
    • D、二叉排序树

    正确答案:A

  • 第10题:

    单选题
    以下常用算法:进制转换、括号匹配、表达式求值、递归程序等是()的应用。
    A

    B

    队列

    C

    顺序表

    D

    链表


    正确答案: C
    解析: 暂无解析

  • 第11题:

    多选题
    栈具有后进先出的特性,用途非常广泛,在()中要使用。
    A

    递归程序

    B

    表达式求值

    C

    汉诺塔问题

    D

    括号匹配


    正确答案: A,C
    解析: 暂无解析

  • 第12题:

    单选题
    若允许表达式内多种括号混合嵌套,则为检查表达式中括号是否正确配对的算法,通常选用的辅助结构是()。
    A

    B

    线性表

    C

    队列

    D

    二叉排序树


    正确答案: C
    解析: 暂无解析

  • 第13题:

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

    A.线性表的顺序存储

    B.队列

    C.线性表的链式存储

    D.栈


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

  • 第14题:

    从下面的选项中选择相应的判断逻辑填补[算法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。

  • 第15题:

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

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

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

    C.广义表

    D.栈


    正确答案:D

  • 第16题:

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

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

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

  • 第17题:

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

    A. 需要进行出栈操作但栈已空
    B. 需要进行入栈操作但栈已满
    C. 表达式处理已结束,但栈中仍留有字符“(”
    D. 表达式处理已结束,但栈中仍留有字符“)”

    答案:A
    解析:
    左括号入站,右括号出栈,, 该题中括号为: ( ) ) ,所以当执行第2个右括号时,第一个左括号已经出栈了,栈为空栈

  • 第18题:

    数据结构里,栈具有后进先出的特性,用途广泛,下列选项中用到栈的有()。

    • A、链表的合并
    • B、表达式求值
    • C、进制转换
    • D、括号匹配

    正确答案:B,C,D

  • 第19题:

    栈的使用非常广泛,在进制转换、括号匹配、表达式求值等算法都能用到。


    正确答案:正确

  • 第20题:

    以下常用算法:进制转换、括号匹配、表达式求值、递归程序等是()的应用。

    • A、栈
    • B、队列
    • C、顺序表
    • D、链表

    正确答案:A

  • 第21题:

    判断题
    栈的使用非常广泛,在进制转换、括号匹配、表达式求值等算法都能用到。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第22题:

    多选题
    数据结构里,栈具有后进先出的特性,用途广泛,下列选项中用到栈的有()。
    A

    链表的合并

    B

    表达式求值

    C

    进制转换

    D

    括号匹配


    正确答案: D,A
    解析: 暂无解析

  • 第23题:

    单选题
    括号匹配算法中,扫描到左括号要进栈,扫描到右括号要()。
    A

    出栈

    B

    进栈

    C

    不操作

    D

    以上都不对


    正确答案: B
    解析: 暂无解析