(12)假定栈用顺序的方式存储,栈类型 stack定义如下:TYPE stack=RECORDA:ARRAY[l..m0] OF datatype;t:O..m0;END;下面是栈的一种基本运算的实现:PROCEDURE xxxx(VAR s:satack);BEGINIF s.t=0THEN print(‘underflow’)ELSE s.t:=s.t-1;END;请问这是栈的哪一种基本运算?A) 栈的推入B)栈的弹出C)读栈顶元素D)将栈置为空栈

题目

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

TYPE stack=RECORD

A:ARRAY[l..m0] OF datatype;

t:O..m0;

END;

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

PROCEDURE xxxx(VAR s:satack);

BEGIN

IF s.t=0

THEN print(‘underflow’)

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

END;

请问这是栈的哪一种基本运算?

A) 栈的推入

B)栈的弹出

C)读栈顶元素

D)将栈置为空栈


相似考题

1.试题六(共 15分)阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:void addElement(Object): 在列表尾部添加一个对象;Object lastElement(): 返回列表尾部对象;int numberOfElement(): 返回列表中对象个数;void removeLastElement(): 删除列表尾部的对象。现需要借助LinkedList来实现一个Stack栈类, Java代码1和Java代码2分别采用继承和组合的方式实现。【Java代码1】public class Stack extends LinkedList{public void push(Object o){ //压栈addElement(o);}public Object peek(){ //获取栈顶元素return (1) ;}public boolean isEmpty(){ //判断栈是否为空return numberOfElement() == 0;}public Object pop(){ //弹栈Object o = lastElement();(2) ;return o;}}【Java代码2】public class Stack {private (3) ;public Stack(){list = new LinkedList();}public void push(Object o){list.addElement(o);}public Object peek(){//获取栈顶元素return list. (4) ;}public boolean isEmpty(){//判断栈是否为空return list.numberOfElement() == 0;}public Object pop(){ //弹栈Object o = list.lastElement();list.removeLastElement();return o;}}【问题】若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)

2.请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。 Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示: 公有成员函数 功能 push 入栈:在栈顶位置添加一个元素 pop 退栈:取出并返回栈顶元素 ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a,b,C C,b,a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****料found****”。 //proj2.cpp include<iostream> using namespacc std; class Stack{ public: virtual void push(char C)=0; virtual char pop=0; };class ArrayStack:public Stack{ char*P; int maxSizc; int top; public: ArravStack(int s) { top=0; maxSize=s: //*********found********* P=______; } ~ArrayStack { //*********found********* _______; } void push(char c) } if(top==maxSize){ cerr<<”Overflow! \n”: return; } //*********found********* _______; top++: } char pop { if(top==0){ cerr<<”Underflow!、n”; return‘\0’; } Top--; //*********found********* ______; } }; void f(Stack&sRef) { char ch[]={‘a’,‘b’,‘c’}; cout<<ch[0]<<”,”<<ch[1]<<”,”<<ch[2]<<endl; sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]); cout<<sRef.poP<<”,”; cout<<sRef.poP<<”,”; cout<<sRef.poP<<endl; } int main { ArrayStack as(10); f(as): return 0: }

3.阅读以下说明和C程序代码,将应填入______处的语句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:define MAXSIZE 32typedef struct{int * elem; /* 栈的存储区 */int max; /* 栈的容量,即栈中最多能存放的元素个数 */int top; /* 栈顶指针 */}Stack;[C代码]int InitStack(Stack * S,int n) / * 创建容量为n的空栈 */{ S->elem=(int *)malloc(n * sizeof(int));if(S->elem==NULL)return-1;S->max=n; (1)=O;return 0;}int Push(Stack * S,int item) / * 将整数item压入栈顶 * /{ if(S->top==S->max){ printf(“Stack is full! \n”);return-1;}(2)=item;return 0;}int StackEmpty(StackS) {return (! S.top)? 1:0;} / * 判断栈是否为空 * /int Pop(Stack *S ) / * 栈顶元素出栈 * /{ if(! S->top){printf(“Pop an empty stack! \n”);return-1;}return (3);}void MultibaseOutput(long n,int B){ int m;StackS;if (InitStack(&S,MAXSIZE)){printf(“Failure! \n”);return;}do {if(Push(&S, (4) )){printf(“Failure! \n”);return;}n=(5);}while(n!=0);while(! StackEmpty(S)){ / * 输出B进制的数 * /m=Pop(&S);if(m<10)printf(“%d”,m); / * 小于10,输出数字 * /else printf(“%c”,m+55); / * 大于或等于10,输出相应的字符 * /}printf(“\n”);}

4.试题四阅读以下说明和C代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n, int B)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:#define MAXSIZE 32typedef struct {int *elem; /* 栈的存储区 */int max; /* 栈的容量,即栈中最多能存放的元素个数 */int top; /* 栈顶指针 */}Stack;[C代码]int InitStack(Stack *S, int n) /* 创建容量为n的空栈 */{ S->elem = (int *)malloc(n * sizeof(int));if(S->elem == NULL) return -1;S->max = n; (1) = 0 ; return 0;}int Push(Stack *S, int item) /* 将整数item压入栈顶 */{ if(S->top == S->max){ printf("Stack is full!\n"); return -1;}(2) = item ; return 0;}int StackEmpty(Stack S) { return (!S.top) ? 1 : 0; } /* 判断栈是否为空 */int Pop(Stack *S) /* 栈顶元素出栈 */{ if(!S->top) { printf("Pop an empty stack!\n"); return -1;}return (3) ;}void MultibaseOutput(long n, int B){ int m; Stack S;if (InitStack(&S, MAXSIZE)) {printf("Failure!\n"); return;}do {if (Push(&S, (4) )) {printf("Failure!\n"); return;}n = (5) ;}while(n != 0);while(!StackEmpty(S)) { /* 输出B进制的数 */m = Pop(&S);if(m < 10) printf("%d", m); /* 小于10,输出数字 */else printf("%c", m + 55); /* 大于或等于10,输出相应的字符 */}printf("\n");}

参考答案和解析
正确答案:A
更多“(12)假定栈用顺序的方式存储,栈类型 stack定义如下: TYPE stack=RECORD A:ARRAY[l..m0] OF dat ”相关问题
  • 第1题:

    使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。

    (1)定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“//**1**”之后添加适当的语句。

    (2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-1(size等于-1表示栈为空)。请在注释“//**2**”之后添加适当的语句。

    (3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压入栈中,即在size小于数组的最大下标情况下, size自加1,再给x赋值。请在注释“//**3**”之后添加适当的语句。

    (4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的情况下,返回数组中下标为size的元素的值,并将size减1。请在注释“//**4**”之后添加适当的语句。

    程序输出结果如下:

    the top elem:1

    the pop elem:1

    the stack is empty

    注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

    源程序文件test34_3.cpp清单如下:

    include<iostream.h>

    class stack

    {

    //** 1 **

    public:

    stack ( );

    bool empty(){return size==-1;}

    bool full() {return size==99;}

    void push(int x);

    void pop();

    void top();

    };

    stack::stack()

    {

    //** 2 **

    for(int i=0; i<100; i++)

    *(sp+i)=0;

    size=-1;

    }

    void stack::push(int x)

    {

    //** 3 **

    cout<<"the stack is full"<<end1;

    else

    {

    size++;

    *(sp+size) = x;

    }

    }

    void stack::pop()

    {

    //** 4 **

    cout<<"the stack is empty"<<end1;

    else

    {

    cout<<"the pop elem:"<<*(sp+size)<<end1;

    size--;

    }

    }

    void stack::top()

    {

    if iempty() )

    cout<<"the stack is empty"<<end1;

    else

    {

    cout<<"the top elem:"<<*(sp+size)<<end1;

    }

    }

    void main ( )

    {

    stack s;

    s.push(1);

    s.top();

    s.pop();

    s.top();

    }


    正确答案:(1) int *sp; int size; (2) sp=new int[100]; (3) if(full()) (4) if(empty())
    (1) int *sp; int size; (2) sp=new int[100]; (3) if(full()) (4) if(empty()) 解析:本题主要考查的是考生利用类、数组、指针和基本控制结构等知识,建立经典数据结构的能力。栈在数据结构中是一应用范围很广的类,在这里实现的只是最核心的部分。在该题中特别注意使用new进行动态空间申请及指针在数组访问中的应用。

  • 第2题:

    ( 15 )请将下列栈类 Stack 补充完整

    class Stack{

    private:

    int pList[100]; // int 数组 , 用于存放栈的元素

    int top; // 栈顶元素 ( 数组下标 )

    public:

    Stack():top(0){}

    void Push(const int &item); // 新元素 item 压入栈

    int Pop(void); // 将栈顶元素弹出栈

    };

    void Stack::Push(const int &item){

    if(top == 99) // 如果栈满 , 程序终止

    exit(1);

    top++; // 栈顶指针增 1

    ___________;

    }

    int Stack::Pop(){

    if(top<0) // 如果栈空 , 程序终止

    exit(1);

    return pList[top--];

    }


    正确答案:

  • 第3题:

    栈(Stack)是限定仅在(18)进入插入或删除操作的线性表。对栈来说,表尾端称为(18);表头端称为(18)。

    A.表头 栈顶(top),栈底(bottom)

    B.表头,栈底(bottom)栈顶(top)

    C.表尾,栈顶(top)栈底(bottom)

    D.表尾,栈底(bottom)栈顶(top)


    正确答案:C
    解析:此题考察对栈(Stack)定义的理解。

  • 第4题:

    下面是一个栈类的模板,其中push函数将元素i压入栈顶,pop函数弹出栈顶元素。栈初始为空,top值为0,栈顶元素在stack[top-1]中,在下面横线处填上适当的语句,完成栈类模板的定义。

    template<class t>

    class Tstack

    {

    enum{size=1000};

    T stack[size]

    int top;

    public:

    Tsack():top(0){}

    void push(const T&i){

    if(top<size)

    stack[top++]=i;

    }

    T pop()

    {

    if(top==O)exit(1);//栈空时终止运行

    retum【 】;

    }

    };


    正确答案:stack[--top]
    stack[--top] 解析:++/--运算符;注意栈顶元素在stack[top-1]中。

  • 第5题:

    请将下列栈类Stack的横线处补充完整。

    class Stack{

    private:

    int pList[100]; ∥int数组,用于存放栈的元素

    int top; ∥栈顶元素(数组下标)

    public:

    Stack():top(0){}

    void Push(const int &item); ∥新元素item


    正确答案:pList[top]=item
    pList[top]=item 解析: 此题考查的是堆栈数据结构。堆栈是一种先进后出的队列,每次入栈在栈顶,出栈也在栈顶。当栈顶指针所指位置是最后一个有效数据时,下次出栈直接取出栈顶指针所指数据,然后栈顶指针再减1;入栈时需要将栈顶指针先增1,然后将数据存入栈顶指针所指位置。本题中,从Pop()数中可以看出,是先取数然后top才会减1,Push()函数应先增1再取数。所以应填入pList[top]=item。

  • 第6题:

    阅读下列说明和C代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stock Top),而另一端称为栈底(Stock Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。

    当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。

    以下C代码采用链式存储结构实现一个整数栈操作。

    【C代码】

    typedef struct List {

    int data; //栈数据

    struct List* next; //上次入栈的数据地址

    }List;

    typedef struct Stack{

    List* pTop; //当前栈顶指针

    }Stack;

    Stack* NewStack() {return (Stack*) calloc(1/sizeof(Stack));}

    int IsEmpty(Stack* S){//判断栈S是否为空栈

    if((1))return 1;

    return 0;

    }

    int Top(Stack* s){//获取栈顶数据。若栈为空,则返回机器可表示的最小整数

    if(IsEmpty(S))return INT_ MIN;

    return (2);

    }

    void Push(Stack* S,int theData) {//将数据theData压栈

    List* newNode;

    newNode=(List*)calloc(1/sizeof (List));

    newNode->data=theData;

    newNode->next=S->pTop;

    S->pTop=(3);

    }

    void Pop(Stack* S) {//弹栈

    List* lastTop;

    if(IsEmpty(S) ) return;

    lastTop=S->pTop;

    S->pTop=(4);

    free(lastTop);

    }

    define MD(a) a<<2

    int main(){

    int i;

    Stack* myStack;

    myStack= NewStack();

    Push(myStack,MD(1));

    Push(myStack,MD(2));

    Pop(myStack);

    Push(myStack,MD(3)+1);

    while( !IsEmpty(myStack) ){

    printf("%d",Top(myStack));

    Pop(myStack);

    }

    return 0;

    }

    以上程序运行时的输出结果为:(5)


    正确答案:(1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode (4)S->pTop->next或lastTop->next (5)244
    (1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode (4)S->pTop->next,或lastTop->next (5)244 解析:本题考查基本程序设计能力。
    堆栈是软件设计中常使用的一种经典数据结构,题目给出的操作都是任何堆栈都具有的基本操作。堆栈的存储结构通常采用数组或链表形式,但无论采用哪种存储结构,整体上呈现的是后进先出的特点,即后进入堆栈的元素先出栈。题目中给出的结构体 Stack仅包含一个指向栈顶元素的指针(栈顶指针),当且仅当堆栈中没有元素时,该指针应为NULL。当向堆栈中增加元素时,首先需要动态创建该元素的存储区,并且栈顶指针指向该元素。当元素出栈时,栈顶指针则指向出栈元素的紧前一个元素。结构体List表示栈中元素,包含对应的数据和指向紧上次入栈的元素指针next,对于第1个入栈的元素,指针next为NULL,而其他元素中的指针next一定不为NULL。
    C语言中,如果用一个整数型表达式表示条件判定语句的话,该表达式的值为。则表示假,非0表示真。从给定程序代码可以看出,对于函数IsEmpty,若其返回值为0则表示堆栈非空,否则表示堆栈为空。因此,对于空(1),必须填写可表示堆栈为空的判定语句:S=NULL||S->p)Top==NULL,这2个条件中只要有1个条件满足,则表明堆栈S为空。对于空(2),此时需要返回栈顶元素中的数据,而栈顶元素为S->pTop,所以对应的数据应该为S->pTop->data。
    对于压栈操作Push,在为新元素获取存储空间后,必须调整堆栈的栈顶指针S->pTop指向新元素的存储区,即S->pTop=newNode。对于弹栈操作Pop,弹出栈顶元素lastTop后,需要调整栈顶指针,使其指向被弹出元素的下一个元素,即S->pTop=S->pTop->next,或S->pTop=lastTop->next。
    对于main函数中宏MD(x),在程序预编译时会按字符替换为“x2”。所以在main函数中,首先入栈的元素为“12”,即整数4,第2个入栈的元素为“22”,即整数8,其次将8弹出,然后再将“32+1”入栈,C语言中“+”优先级高于“”,所以此时入栈者为整数24,而此时堆栈中有2个元素,其中栈顶元素为24,下一元素为4。最后,若堆栈非空,则循环完成显示栈顶元素的值、弹出栈顶元素的操作,直至堆栈为空。所以程序执行时的输出内容为“244”。

  • 第7题:

    试题七(共 15 分)

    阅读以下说明和C程序,将应填入 (n) 处的字句写在答题纸的对应栏内。

    【说明】

    现有 n(n < 1000)节火车车厢,顺序编号为 1,2,3,...,n,按编号连续依次从 A方向的铁轨驶入,从 B 方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到 A方向的铁轨上;一旦车厢驶入 B 方向铁轨就不能再回到车站,如图 7-1所示,其中 Station 为栈结构,初始为空且最多能停放 1000 节车厢。

    下面的 C 程序判断能否从 B 方向驶出预先指定的车厢序列,程序中使用了栈类

    STACK,关于栈基本操作的函数原型说明如下:

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

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

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

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

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

    【C 程序】

    include<stdio.h>

    /*此处为栈类型及其基本操作的定义,省略*/

    int main( ){

    STACK station;

    int state[1000];

    int n; /*车厢数*/

    int begin, i, j, maxNo; /*maxNo 为 A端正待入栈的车厢编号*/

    printf("请输入车厢数: ");

    scanf("%d",&n);

    printf("请输入需要判断的车厢编号序列(以空格分隔) : ");

    if (n < 1) return -1;

    for (i = 0; i<n; i++) /* 读入需要驶出的车厢编号序列,存入数组 state[] */

    scanf("%d",&state[i]);

    (1) ; /*初始化栈*/

    maxNo = 1;

    for(i = 0; i < n; ){/*检查输出序列中的每个车厢号 state[i]是否能从栈中获取*/

    if ( (2) ){/*当栈不为空时*/

    if (state[i] == Top(station)){ /*栈顶车厢号等于被检查车厢号*/

    printf("%d ",Top(station));

    Pop(&station); i++;

    }

    else

    if ( (3) ){

    printf("error\n");

    return 1;

    }

    else {

    begin = (4) ;

    for(j = begin+1; j<=state[i]; j++) {

    Push(&station, j);

    }

    }

    }

    else { /*当栈为空时*/

    begin = maxNo;

    for(j = begin; j<=state[i]; j++){

    Push(&station, j);

    }

    maxNo = (5) ;

    }

    }

    printf("OK");

    return 0;

    }


    正确答案:


    试题七 分析
      本题考查栈数据结构的应用和C程序设计基本能力。
      栈的运算特点是后进先出。在本题中,入栈序列为1、2、…、n-1、n,出栈序列保存在state[]数组中,state[0]记录出栈序列的第1个元素,state[1]记录出栈序列的第2个元素,依此类推。程序采用模拟元素入栈和出栈的操作过程来判断出栈序列是否恰当。需要注意的是,对于栈,应用时不一定是所有元素先入栈后,再逐个进行出栈操作,也不一定是进入一个元素紧接着就出来一个元素,而是栈不满且输入序列还有元素待进入就可以进栈,只要栈不空,栈顶元素就可以出栈,从而使得唯一的一个入栈序列可以得到多个出栈序列。当然,在栈中有多个元素时,只能让栈顶的元素先出栈,栈中其他的元素能从顶到底逐个出栈。本题中入栈序列和出栈序列的元素为车厢号。
      空(1)处对栈进行初始化,根据题干中关于栈基本操作的说明,调用InitStack初始化栈,由于形参是指针参数,因此实参应为地址量,即应填入“Initstack(&station)”。
      当栈不空时,就可以令栈顶车厢出栈,空(2)处应填入“!IsEmpty(station)”。
      栈顶车厢号以Top(station)表示,若栈顶车厢号等于出栈序列的当前车厢号state[i],说明截至到目前为止,出栈子序列state[0]~state[i]可经过栈运算获得。由于进栈时小编号的车厢先于大编号的车厢进入栈中,因此若栈顶车厢号大于出栈序列的当前车厢号state[i],则对于state[i]记录的车厢,若它还在栈中,则此时无法出栈,因为它不在栈顶,所以出错,若它已先于当前的栈顶车厢出栈,则与目前的出栈序列不匹配,仍然出错,因此空(3)处应填入“state[i]<Top(station)”。
      若栈顶车厢号小于出栈序列的当前车厢号state[i],则说明state[i]记录的车厢还没有进入栈中,因此从入栈序列(A端)正待进入的车厢(即比栈顶车厢号正好大l)开始,直到state[i]记录的车厢号为止,这些车厢应依次进入栈中。程序中用以下代码实现此操作:
      for(j=begin+1;j<=state[i];j++){
      Push(&station,j);
      }
      显然,begin应获取栈顶车厢号的值,即空(4)处应填入“Top(station)”。
      还有一种情况,就是待考查的出栈序列还没有结束而栈空了,则说明需要处理入栈序列,使其车厢入栈。程序中用maxNO表示A端正待入栈的车厢编号,相应的处理如下面代码所示:
      begin=maxNO;
      for(j=begin;j<=state[i];j++){
      Push(&station,j);
      }
      接下来,A端正待入栈的车厢编号等于j或state[i]+1,即空(5)处应填入j或“state[i]+1”。
      如果驶出的车厢编号序列是经由栈获得的,则程序运行时输出该序列及字符串“OK”否则输出“error”而结束。
    试题七 参考答案(共15分,各3分)
    (1)InitStack(&station)
    (2)!IsEmpty(station)
    (3)state[i]Top(station)
    (4)Top(station)
    (5)j

  • 第8题:

    当用长度为N的一维数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件为()。


    正确答案:top==0

  • 第9题:

    假定利用数组a[m]顺序存储一个栈,用top表示栈顶指针,用top= =0表示栈满,该数组所能存储的栈的最大长度为m,当()时,再做退栈运算会发生“下溢”。

    • A、top == m-1
    • B、top == 0
    • C、top == m
    • D、top == 1

    正确答案:C

  • 第10题:

    填空题
    当用长度为N的一维数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件为()。

    正确答案: top==0
    解析: 暂无解析

  • 第11题:

    名词解释题
    Stack栈

    正确答案: 一个协议系列的实现的非正规名称。此名称的由来是协议层次图象一个垂直的栈。
    解析: 暂无解析

  • 第12题:

    单选题
    向一个顺序栈S(栈顶指针为top)中插入元素x时,首先要()。
    A

    S->stack[S->top]=x

    B

    S->top++

    C

    S->top--

    D

    x=S->stack[S->top]


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

  • 第13题:

    阅读以下说明C++代码,将应填入(n)处的字句写在对应栏内。

    [说明]

    以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数:empty判断堆栈是否为空;push进行人栈操作;pop进行出栈操作。

    [C++程序]

    include "stdafx. h"

    include <iostream, h>

    eonst int maxsize = 6;

    class stack {

    float data[ maxsize];

    int top;

    public:

    stuck(void);

    ~ stack(void);

    bool empty(void);

    void push(float a);

    float pop(void);

    };

    stack: :stack(void)

    { top =0;

    cout < < "stack initialized." < < endl;

    }

    stack:: ~stack(void) {

    cout < <" stack destoryed." < < endl;

    bool stack:: empty (void) {

    return (1);

    void stack: :push(float a)

    if(top= =maxsize) {

    cout < < "Stack is full!" < < endl;

    return;

    data[top] =a;

    (2);

    }

    float stack:: pop (void)

    { if((3)){

    cout< < "Stack is undcrflow !" < < endl;

    return 0;

    (4);

    return (5);

    }

    void main( )

    { stack s;

    coat < < "now push the data:";

    for(inti=l;i< =maxsize;i+ +) {

    cout< <i< <" ";

    s. push(i);

    }

    coat < < endl;

    cout< < "now pop the data:";

    for(i = 1 ;i < = maxsize ;i + + )

    cout< <s. pop()< <" ";

    }


    正确答案:(1)top==0? true:false (2)top++(或者top =top+1)(3)top==0 (4)top--(或者top =top-1) (5)data[top]
    (1)top==0? true:false (2)top++(或者top =top+1)(3)top==0 (4)top--(或者top =top-1) (5)data[top] 解析:(1)判断堆栈是否为空的条件是top为0,而且本函数的返回值为布尔类型,故此处应该填写top==0? true:false;
    (2)数据入栈后,栈顶指针要向上移动一个单元;
    (3)top为0说明堆栈已经空了,此处if语句返回堆栈为空的提示;
    (4)先将栈顶指针往下移动一个单元,才可以指向要出栈的数据;
    (5)本行代码的功能是返回要出栈的数据。

  • 第14题:

    以下程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含点值和指向上一个节点的指针 prev;另一个类是栈类 stack, 它包含栈的头指针 top。

    生成的链式栈如下图所示。

    〈IMG nClick=over(this) title=放大 src="tp/jsj/2jc++j28.1.gif"〉

    下面是实现程序,请填空完成此程序。

    include 〈iostream〉

    using namespace std;

    class stack;

    class node

    {

    int data;

    node *prev;

    public:

    node(int d, node *n)

    {

    data=d;

    prev=n;

    }

    friend class stack;

    };

    class stack

    {

    node *top; //栈头

    public:

    stack()

    {

    top=0;

    }

    void push(int i)

    {

    node *n=【 】;

    top=n;

    }

    int pop()

    {

    node *t=top;

    if (top)

    {

    top=top-〉prev;

    int c= t-〉data;

    delete t;

    return c;

    }

    return 0;

    }

    int main ()

    {

    stack s;

    s.push(6);

    s.push(3);

    s.push (1);

    return 0;

    }


    正确答案:new node(itop)
    new node(i,top) 解析:本题考核友元类以及对象成员的应用,属于综合考题。本程序中定义了两个类node和stack,用于实现堆栈的压入和弹出操作。其中,类 stack是类node的友元类,这样类stack中的成员可以访问类node中的所有成员。在类node中,定义两个私有变量:整型变量data和对象指针prev。变量data用于保存节点的数值,而对象指针prey用于指向上一节点。在类node的构造函数中,形参是数据d和对象指针n。在类stack中,定义了一个私有变量,栈顶指针top,并在构造函数中赋值0(即指针为空)。
    函数push()实现入栈操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶,即top。然后让top指针指向新的节点。所以在push()函数中应填入“node*n=new node(i,top)”。类stack中的pop()函数实现数据的弹出功能。先定义了一个对象指针t指向栈顶节点。然后判断堆栈是否为空,如果为空,则返回0,否则就弹出栈顶节点的值。那么应该先将栈顶指针后退一个节点,然后把对象t指针指向的节点值弹出,并删除节点t。

  • 第15题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下程序的功能是设计一个栈类stack<T>,并建立一个整数栈。

    【程序】

    include < iostream. h >

    include < stdlib. h >

    const int Max =20; //栈大小

    template < class T >

    class stack{ //栈元素数组

    T s[Max]; //栈顶下标

    int top;

    public:

    stack( )

    {

    top =-1; //栈顶初始化为-1

    }

    void push( const T &item); //item入栈

    T pop( ); //出栈

    int stackempty( ) const; //判断栈是否为

    };

    template < class T >

    void stack <T >::push(const T &item)

    {

    if(top==(1))

    {

    cout <<"栈满溢出" <<endl;

    exit(1);

    }

    top ++

    s[top] = item;

    }

    template < class T >

    T stack<T> ::pop()

    {

    T temp;

    if(top==(2))

    {

    cout <<"栈为空,不能出栈操作" < < endl;

    exit(1);

    }

    temp =s[top];

    top --;

    return temp;

    }

    template < class T >

    int stack < T >:: stackempty( ) const

    { return top == -1;

    {

    void main( )

    {

    stack <int> st;

    int a[] ={1,2,3,4,5};

    cout <<"整数栈" <<endl;

    cout <<"入栈序列:" <<endl;

    for(int i=0;i<4;i ++)

    {

    cout <<a[i] <<" ";

    (3);

    }

    cout << endl <<"出栈序列";

    while((4))

    tout<<(5)<<" ";

    cout< < endl;

    }


    正确答案:(1)Max-1 (2)-1 (3)st.push(a[i]) (4)!st.stackempty() (5)st.pop()
    (1)Max-1 (2)-1 (3)st.push(a[i]) (4)!st.stackempty() (5)st.pop() 解析:本题用类模板方式定义一个栈类,其中有两个私有数据成员:s[](存放栈元素)和top(栈顶元素下标),以及3个公有成员函数: push(元素入栈)、Pop(元素出栈)和stackempty(判断栈是否为空)。
    在函数push()中,首先要判断是否栈满。栈的大小为Max,数组的下标从。开始,所以栈满的条件是栈顶元素下标为Max-1,所以(1)空应填入“Max-1”。同样,在函数pop()中,首先要判断是否为空栈,由于栈顶初始化为-1,所以(2)空应填入“-1”。
    在主函数中,先进行入栈操作,所以(3)空应填入“st.push(a [i])”。然后进行出栈操作,判断栈是否为空,调用对象的函数stackempty(),所以(4)空应填入“!st.stackempty()”。(5)空处调用出栈函数,所以应填入“st.pop()”。

  • 第16题:

    假定栈用顺序的方式存储,栈类型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

  • 第17题:

    使用VC6打开考生文件夹下的工程MyProj8。此工程包含一个源程序文件MyMain8.cpp,该程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含节点值和指向上一个节点的指针prey;另一个类是栈类stack,它包含栈的头指针top。但类的定义并不完整。

    请按要求完成下列操作,将类Sample的定义补充完成:

    ①定义私有节点值data,它是血型的数据,以及定义一个指向上一个节点的指针prev。请在注释“//* *1* *”之后添加适当的语句。

    ②完成构造函数node(int d,node*n)的定义,使得私有成员data和prev分别初始化为d和n。请在注释“//* *2* *”之后添加适当的语句。

    ③完成类stack的成员函数push(int i)的类体内的定义。函数push()实现入栈这个操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶。请在注释“//* *3 * *”之后添加适当的语句。

    注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

    源程序文件MyMain8.cpp清单如下:

    //MyMain 8.cpp

    include <iostream>

    using namespace std;

    class stack;

    class node

    {

    private:

    //* * 1 * *

    public:

    node(int d, node *n)

    {

    //* * 2 * *

    }

    friend class stack;

    };

    class stack

    {

    node *top; //栈头

    public:

    stack()

    {

    top=0;

    }

    void push(int i)

    {

    //* * 3 * *

    }

    int pop()

    {

    node*t=top;

    if(top)

    {

    top=top->prev;

    int c=t->data;

    delete t;

    return c;

    }

    return 0;

    }

    };

    int main()

    {

    stack s;

    s.push(6);

    s.push(3);

    s.push(1);

    return 0;

    }


    正确答案:

  • 第18题:

    The line of computing jobs waiting to be run might be a ( ) . These job requests are serviced in order of their arrival.

    A. array B. queue C. record D. stack


    正确答案:B

  • 第19题:

    Stack栈


    正确答案: 一个协议系列的实现的非正规名称。此名称的由来是协议层次图象一个垂直的栈。

  • 第20题:

    假定利用数组a[N]顺序存储一个栈,用top表示栈顶元素的下标位置,用top= =-1表示栈空,用top= =N - 1表示栈满,则该数组所能存储的栈的最大长度为()

    • A、N - 1
    • B、N
    • C、N+1
    • D、N十2

    正确答案:B

  • 第21题:

    向一个顺序栈S(栈顶指针为top)中插入元素x时,首先要()。

    • A、S->stack[S->top]=x
    • B、S->top++
    • C、S->top--
    • D、x=S->stack[S->top]

    正确答案:B

  • 第22题:

    单选题
    假定利用数组a[N]顺序存储一个栈,用top表示栈顶元素的下标位置,用top= =-1表示栈空,用top= =N - 1表示栈满,则该数组所能存储的栈的最大长度为()
    A

    N - 1

    B

    N

    C

    N+1

    D

    N十2


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

  • 第23题:

    单选题
    假定利用数组a[n]顺序存储一个栈,用top表示栈顶指针,用top==n+l表示栈空,该数组所能存储的栈的最大长度为n,则表示栈满的条件是()
    A

    top == -1

    B

    top == 0

    C

    top>l

    D

    top == 1


    正确答案: D
    解析: 栈空是指栈中不含任何数据元素,栈满是指栈中没有任何的空闲空间。根据本题的假设栈顶指针top==n+l表示栈空,可知,该数组将栈底放在下标大的那端,它的下界为1,上界为n,当top=n时存入第一个元素,因为该数组所能存储的栈的最大长度为n,所以,栈满时栈顶指针top应等于1。