已知栈的基本操作函数:intInitStack(SqStack*S);//构造空栈intStackEmpty(SqStack*S);//判断栈空intPush(SqStack*S,ElemTypee);//入栈intPop(SqStack*S,ElemType*e);//出栈函数conversion实现十进制数转换为八进制数,请将函数补充完整。voidconversion(){InitStack(S);scanf(“%d”,&N);while(N){(1);N=N/8;}while((2)){Pop(S,

题目

已知栈的基本操作函数:intInitStack(SqStack*S);//构造空栈intStackEmpty(SqStack*S);//判断栈空intPush(SqStack*S,ElemTypee);//入栈intPop(SqStack*S,ElemType*e);//出栈函数conversion实现十进制数转换为八进制数,请将函数补充完整。voidconversion(){InitStack(S);scanf(“%d”,&N);while(N){(1);N=N/8;}while((2)){Pop(S,&e);printf(“%d”,e);}}//conversion


相似考题
参考答案和解析
正确答案:(1)Push(S,N%8) (2)!StackEmpty(S)
更多“已知栈的基本操作函数:intInitStack(SqStack*”相关问题
  • 第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、e、f依次进栈、进栈、出栈、进栈、进栈、出栈、进栈的操作,则操作完后,栈S的栈顶元素为()。

    A.a

    B.b

    C.d


    答案:C

  • 第3题:

    栈的特点是后进先出,若用单链表作为栈的存储结构,并用头指针作为栈顶指针,则( )。

    A.入栈和出栈操作都不需要遍历链表
    B.入栈和出栈操作都需要遍历链表
    C.入栈操作需要遍历链表而出栈操作不需要
    D.入栈操作不需要遍历链表而出栈操作需要

    答案:A
    解析:
    本题用单链表作为栈的存储结构,因为栈的操作是先进后出,因此无论是入栈还是出栈,都只对栈顶元素操作,而在单链表中用头指针作为栈顶指针,此时无论是出栈还是入栈,都只需要对头指针指向的栈顶指针操作即可,不需要遍历链表。

  • 第4题:

    以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为钱顶指针,补充程序。

  • 第5题:

    “删除栈顶元素”、“删除栈底元素”、“判断堆栈是否为空”和“将堆栈置为空栈”这4种操作中,()不是堆栈的基本操作。


    正确答案:“删除栈底元素”

  • 第6题:

    函数可能需要栈帧的原因不包括下面哪项?()

    • A、有些局部变量是数组或者结构
    • B、局部变量太少,能都放在寄存器中
    • C、函数用取地址操作符(&)来计算一个局部变量的地址
    • D、函数必须将栈上的某些参数传递到另一个函数

    正确答案:B

  • 第7题:

    已知一个顺序栈*s,栈顶指针是top,它的容量为MAXSIZE,则判断栈空的条件为(),栈满的条件是()


    正确答案:s->top==-1;s->top==MAXSIZE-1

  • 第8题:

    数据结构里,pop操作应该栈的的哪个部位操作()。

    • A、栈底
    • B、栈顶
    • C、栈中
    • D、都不对

    正确答案:B

  • 第9题:

    在8086中,堆栈操作是字操作还是字节操作?已知SS=1050,HSP=0006,HAX=1234,H若对AX执行压栈操作(即执行PUSHA)X;试问AX的内容存放在何处?


    正确答案:堆栈操作是字操作。
    入栈时“先减后压”(SP先减2,再压入操作数),执行压栈操作后AL的内容存放在10504H,AH的内容存放在10505H。

  • 第10题:

    多选题
    数据结构中,下列选项中关于栈的插入操作说法正确的是()。
    A

    栈的插入操作叫做进栈

    B

    栈的插入操作叫做压栈

    C

    栈的插入操作叫做入栈

    D

    栈的插入操作叫做弹栈


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

  • 第11题:

    多选题
    下列选项中关于栈的删除操作描述正确的是()。
    A

    栈的删除操作叫做出栈

    B

    栈的删除操作叫做弹栈

    C

    栈的删除操作叫做压栈

    D

    栈的删除操作叫做进栈


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

  • 第12题:

    填空题
    已知栈的基本操作函数:intInitStack(SqStack*S);//构造空栈intStackEmpty(SqStack*S);//判断栈空intPush(SqStack*S,ElemTypee);//入栈intPop(SqStack*S,ElemType*e);//出栈函数conversion实现十进制数转换为八进制数,请将函数补充完整。voidconversion(){InitStack(S);scanf(“%d”,&N);while(N){(1);N=N/8;}while((2)){Pop(S,&e);printf(“%d”,e);}}//conversion

    正确答案: (1)Push(S,N%8) (2)!StackEmpty(S)
    解析: 暂无解析

  • 第13题:

    a、b、c、d、e、f依次进栈、进栈、出栈、进栈、进栈、出栈的操作,则操作完后,栈S的栈顶元素为()。

    A.a

    B.b

    C.c


    答案:C

  • 第14题:

    已知栈S 初始为空,用 I 表示入栈、O表示出栈,若入栈序列为a1a2a3a4a5,则通过栈 S 得到出栈序列a2a4a5a3a1的合法操作序列( )。

    A.IIOIIOIOOOB.IOIOIOIOIOC.IOOIIOIOIOD.IIOOIOIOOO


    正确答案:A

  • 第15题:

    已知栈S初始为空,用I表示入栈、O表示出栈,若入栈序列为a1a2a3a4a5,则通过栈S得到出栈序列a2a4a5a3a1的合法操作序列(58)。

    A.IIOIIOIOOO
    B.IOIOIOIOIO
    C.IOOIIOIOIO
    D.IIOOIOIOOO

    答案:A
    解析:
    操作步骤:a1a2入,a2出,a3a4入,a4出,a5入,a5出,a3出,a1出。

  • 第16题:

    以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针。
    sizeof(structnode)
    P->next=top
    top=p

  • 第17题:

    已知栈的基本操作函数:intInitStack(SqStack*S);//构造空栈intStackEmpty(SqStack*S);//判断栈空intPush(SqStack*S,ElemTypee);//入栈intPop(SqStack*S,ElemType*e);//出栈函数conversion实现十进制数转换为八进制数,请将函数补充完整。voidconversion(){InitStack(S);scanf(“%d”,&N);while(N){(1);N=N/8;}while((2)){Pop(S,&e);printf(“%d”,e);}}//conversion


    正确答案:(1)Push(S,N%8) (2)!StackEmpty(S)

  • 第18题:

    假定利用数组A[N]顺序存储一个栈,top表示栈顶指针,已知栈未满,则x入栈时所执行的操作是()。

    • A、a[--top]=x
    • B、a[top--]=x
    • C、a[++top]=x
    • D、a[top++]=x

    正确答案:D

  • 第19题:

    下列选项中关于栈的插入操作说法正确的是()。

    • A、栈的插入操作叫做进栈
    • B、栈的插入操作叫做压栈
    • C、栈的插入操作叫做入栈
    • D、栈的插入操作叫做弹栈

    正确答案:A,B,C

  • 第20题:

    数据结构里,push操作应该栈的哪个部位操作()。

    • A、栈底
    • B、栈顶
    • C、栈中
    • D、都不对

    正确答案:B

  • 第21题:

    填空题
    “删除栈顶元素”、“删除栈底元素”、“判断堆栈是否为空”和“将堆栈置为空栈”这4种操作中,()不是堆栈的基本操作。

    正确答案: “删除栈底元素”
    解析: 暂无解析

  • 第22题:

    单选题
    函数可能需要栈帧的原因不包括下面哪项?()
    A

    有些局部变量是数组或者结构

    B

    局部变量太少,能都放在寄存器中

    C

    函数用取地址操作符(&)来计算一个局部变量的地址

    D

    函数必须将栈上的某些参数传递到另一个函数


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

  • 第23题:

    填空题
    已知Q是一个非空队列,S是一个空栈。编写算法,仅用队列和栈的ADT函数和少量工作变量,将队列Q的所有元素逆置。栈的ADT函数有:voidmakeEmpty(SqStacks);置空栈voidpush(SqStacks,ElemTypee);元素e入栈ElemTypepop(SqStacks);出栈,返回栈顶元素intisEmpty(SqStacks);判断栈空队列的ADT函数有:voidenQueue(Queueq,ElemTypee);元素e入队ElemTypedeQueue(Queueq);出队,返回队头元素intisEmpty(Queueq);判断队空

    正确答案: void QueueInvent(Queue q) { ElemType x; makeEmpty(SqStack s); while(!isEmpty(Queue q)) {x=deQueue(Queue q); push(SqStack s, ElemTypex);} while(!isEmpty(SqStack s)) {x=pop(SqStack s); enQueue(Queue q, ElemType x);} }
    解析: 暂无解析

  • 第24题:

    单选题
    假定利用数组A[N]顺序存储一个栈,top表示栈顶指针,已知栈未满,则x入栈时所执行的操作是()。
    A

    a[--top]=x

    B

    a[top--]=x

    C

    a[++top]=x

    D

    a[top++]=x


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