经过下列栈的运算后EmptyStack(s)的值是() InitStack(s);Push(s,a);Push(s,b);Pop(s,x);Pop(s,x) ;A、aB、bC、1D、0

题目

经过下列栈的运算后EmptyStack(s)的值是() InitStack(s);Push(s,a);Push(s,b);Pop(s,x);Pop(s,x) ;

  • A、a
  • B、b
  • C、1
  • D、0

相似考题

2.试题四(共 15 分)阅读以下说明和 C 函数,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“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(STACK s):若s 是空栈,则返回1 否则返回 0。[C 函数]int computing(char expr[], int *result){STACK s; int tnum, a,b; char *ptr;InitStack(&s);ptr = expr; /*字符指针指向后缀表达式串的第一个字符*/while (*ptr!='\0') {if (*ptr==' ') { /*当前字符是空格*/(1) ; /*字符指针指向下一字符*/continue;}elseif (isdigit(*ptr)) {/*当前字符是数字,则将该数字开始的数字串转换为数值*/tnum = (2) ;while (*ptr>=’0’ && *ptr <=’9’) {tnum = tnum * 10 + (3) ;ptr++;}Push( (4) );}else /*当前字符是运算符或其他符号*/if (*ptr=='+'||*ptr=='-'||*ptr =='*'||*ptr =='/'){if (!IsEmpty(s)) {a = Top(s); Pop(&s); /*取运算符的第二个运算数*/if (!IsEmpty(s)) {b = Top(s); Pop(&s); /*取运算符的第一个运算数*/}else return -1;}else return -1;switch (*ptr) {case '+': Push(&s,b+a); break;case '-': Push(&s,b-a); break;case '*': Push(&s,b*a); break;case '/': Push(&s,b/a); break;}}elsereturn -1;ptr++; /*字符指针指向下一字符*/} /* while */if (IsEmpty(s)) return -1;else {(5) = Top(s); Pop(&s); /*取运算结果*/if (!IsEmpty(s)) return -1;return 0;}}

更多“经过下列栈的运算后EmptyStack(s)的值是() Init”相关问题
  • 第1题:

    设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=m。现又在栈中退出一个元素后,栈顶指针top值为()。

    A.m+1

    B.0

    C.m-1

    D.产生栈空错误


    正确答案:A

  • 第2题:

    POP(PUSH(S,A))的运算步骤是首先将元素A压入栈中,若栈S满,出现上溢现象,否则将元素A压入栈顶,且元素个数加1,然后做POP(S)运算,将栈顶元素弹出,且元素个数减一。( )

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


    正确答案: 正确

  • 第3题:

    下列叙述中,正确的是( )。

    A.入栈运算只需将新元素插到栈顶指针指向的位置

    B.出栈运算只需将栈顶元素赋给一个指定变量

    C.出栈运算与读栈顶元素是相同的操作

    D.读栈顶元素不删除栈顶元素


    正确答案:D
    解析:入栈运算需先将栈顶指针加1,然后将新元素插到栈顶指针指向的位置,选项A是错误的。出栈运算需将栈顶元素赋给一个指定变量,然后将栈顶指针减1,选项B是错误的。出栈运算与读栈顶元素不同之处在于读栈顶元素不删除栈顶元素。答案是选项D。

  • 第4题:

    一个栈(Stack)对象有三种状态:S1——栈空;S2——栈非空也非满;S3——栈满。则各个状态的条件如下:

    S1:(t0)创建栈对象时初始化,这是系统做的

    (t1)在S2状态下执行置空运算setEmpty()

    (t2)在S3状态下执行置空运算setEmpty()

    (t3)在S2状态下执行出栈运算Pop()

    S2:(t4)在S1状态下执行进栈运算Push()

    (t5)在S3状态下执行出栈运算Pop()

    S3:(t6)在S2状态下执行进栈运算Push()

    为简化问题,假设栈Stack的容量为2,栈元素的数据类型为整数。

    根据题意,画出栈对象的状态迁移图;


    正确答案:根据题意状态转换图如下:
    根据题意,状态转换图如下:

  • 第5题:

    下列选项中,不是关于栈的基本运算的叙述是______。

    A.从栈顶删除一个元素

    B.判断一个栈是否为空

    C.在栈中的第i个元素之前插入一个新元素

    D.读取栈顶元素的值


    正确答案:C

  • 第6题:

    设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=1。现又要将一个元素进栈,栈顶指针t叩值变为( )。

    A.发生栈满的错误

    B.2

    C.m

    D.0


    正确答案:A
    栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。人栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。题目中初始状态为top=m+1,可知入栈栈顶指针top=top一1,出栈栈顶指针top=top+1,由于栈长为rn,当top=1时栈满,不能再进行人栈操作。故选A选项。

  • 第7题:

    设栈的顺序存储空间为S(1:m),初始状态为top=m+1。现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为()。

    A.30

    B.20

    C.m-19

    D.m-20


    正确答案:C

  • 第8题:

    阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。4、【说明】 计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*(120-37)”的后缀表达式形式为“46 512037-*+”。 计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇,到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5120 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函数】 int computing (char expr[],int *result) { STACK s; int tnum,a,b; char *ptr; InitStack(&s); ptr=expr;pstr /*字符指针指向后缀表达式串的第一个字符*/ while(*ptr!='\0') { if(*ptr==' ') { /*当前字符是空格*/ (1) ; /*字符指针指向下一字符*/ continue; } else if(isdigit (*ptr)) { /*当前字符是数字,则将该数字开始的数字串转换为数值*/ tnum= (2) ; while (*ptr>='0' && *ptr <='9') { tnum=tnum * 10 + (3) ; ptr++; } Push( (4) ); } else /*当前字符是运算符或其他符号*/ if (*ptr=='+'||*ptr=='-'||*ptr=='*'||*ptr=='/'){ if(!IsEmpty(s)) { a=Top(s);Pop(&s); /*取运算符的第二个运算数*/ if(!IsEmpty(s)) { b=Top(s);Pop(&s);/*取运算符的第一个运算数*/ } else return -1; } else return -1; switch (*ptr) { case '+': Push(&s,b+a); break; case '-':Push(&s,b-a); break; case '*':Push(&s,b*a); break; case '/':Push(&s,b/a); break; } } else return -1; ptr++; /*字符指针指向下一字符*/ }/*while*/ if(IsEmpty(s)) return -1; else{ (5) =Top(s); Pop(&s); /*取运算结果*/ if(!IsEmpty(s)) return -1; return 0; } }


    答案:
    解析:
    (1)ptr++,或++ptr,或ptr=ptr+1,或其等价表示 (2)0,或tnum=0 (3)*ptr-'0',或*ptr-48,或其等价表示 (4)&s,tnum (5)*result
    【解析】

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

  • 第9题:

    4个元素进S栈的顺序是A、B、C、D,进行两次Pop(S,x)操作后,栈顶元素的值是()。

    • A、A
    • B、B
    • C、C
    • D、D

    正确答案:B

  • 第10题:

    单选题
    今有一空栈S,对下列待进栈的数据元素序列a,b,c,d,e,f依次进行进栈,进栈,出栈,进栈,进栈,出栈的操作,则此操作完成后,栈S的栈顶元素为()
    A

    f

    B

    c

    C

    a

    D

    b


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

  • 第11题:

    单选题
    4个元素进S栈的顺序是A,B,C,D,经运算POP(S)后,栈顶元素是()
    A

    A

    B

    B

    C

    C

    D

    D


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

  • 第12题:

    单选题
    经过下列栈的运算后EmptyStack(s)的值是() InitStack(s);Push(s,a);Push(s,b);Pop(s,x);Pop(s,x) ;
    A

    a

    B

    b

    C

    1

    D

    0


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

  • 第13题:

    经过下列栈的操作后,GetTop(ST)的值是()。InitStack(ST);push(ST,'a');push(ST,'b');pop(ST,x);

    A、A

    B、B

    C、1

    D、2


    参考答案:A

  • 第14题:

    在以下栈的基本运算中,不是加()

    AlnitStack(S)

    BPush(S,X)

    CPop(S)

    Dempty(S)


    参考答案:D

  • 第15题:

    假定栈用顺序的方式存储,栈类型stack定义如下:

    TYPE stack=RECORD

    A: ARRAY[1..M0OF datatype;

    t:0..M0;

    END;

    下面是栈的一种基本运算的实现:

    PROCEDURE xxxx(VAR s:stack)

    BEGIN

    IF s.t=0

    THEN print('underflow')

    ELSE s.t:=s.t-1;

    END;

    请问这是栈的哪种基本运算?( )。

    A) 栈的推入

    B) 栈的弹出

    C) 读栈顶元素

    D) 将栈置为空栈

    A.

    B.

    C.

    D.


    正确答案:B

  • 第16题:

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

  • 第17题:

    已知关系R和S见表,则关系S是关系R经过下列( )的结果。

    A.连接运算

    B.选择运算

    C.投影运算

    D.除运算


    正确答案:C
    解析:连接和除运算是针对两个关系进行的运算,本题关系S是及一个关系运算的结果,因此,首先排除A) 和D) 。选择运算是从关系中选择符合条件的元组,其结果元数不变,元组数小于等于原关系;投影运算是原关系中选择出若干属性组成新的关系,新关系的元数和元组数都可能与原关系有变化。由本题可知,关系S是由关系T前两个属性组成的关系,应是投影运算的结果。

  • 第18题:

    在下列栈的基本运算中,不是加工型运算的是______。

    A.初始化

    B.进栈

    C.退栈

    D.判栈空


    正确答案:D

  • 第19题:

    已知关系R和S,则关系S是关系R经过下列______的结果。

    A.联接运算

    B.选择运算

    C.投影运算

    D.除运算


    正确答案:C
    解析:投影运算是原关系中,选择出若干属性组成新的关系,新关系的元数和元组数都可能与原关系有变化。由本题可知,关系S是由关系T前两个属性组成的关系,应是投影运算的结果。

  • 第20题:

    利用两个栈S1和S2模拟一个队列,如何利用栈的运算实现队列的插入和删除操作,请简述算法思想。


    正确答案:利用两个栈S1和S2模拟一个队列,当需要向队列中插入一个元素时,用S1来存放已输入的元素,即通过向栈S1执行入栈操作来实现;当需要从队列中删除元素时,则将S1中元素全部送入到S2中,再从S2中删除栈顶元素,最后再将S2中元素全部送入到S1中;判断队空的条件是:栈S1和S2同时为空。

  • 第21题:

    顺序栈的上溢是指()。

    • A、栈满时作退栈运算
    • B、栈满时作进栈运算
    • C、栈空时作退栈运算
    • D、栈空时作进栈运算

    正确答案:B

  • 第22题:

    单选题
    设栈的顺序存储空间为S(1:m),初始状态为top=m+1。现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为(  )。
    A

    30

    B

    20

    C

    m-19

    D

    m-20


    正确答案: A
    解析:
    初始状态为栈顶指针指向高地址,top=m+1,每次入栈top-1。那么当第x个元素入栈时,top=m+1-x=20,解得x=m+1-20=m-19。答案选择C选项。

  • 第23题:

    单选题
    顺序栈的上溢是指()。
    A

    栈满时作退栈运算

    B

    栈满时作进栈运算

    C

    栈空时作退栈运算

    D

    栈空时作进栈运算


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