计算机二级

下面是一个栈类的模板,其中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)ex

题目

下面是一个栈类的模板,其中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【 】;

}

};

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

若push、pop分别表示入栈、出栈操作,初始栈为空且元素1、2、3依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为 ( )

A.321
B.213
C.231
D.123

答案:B
解析:
栈的运算特点为在同一端插入和删除元素,即先入后出,总是栈顶元素先出栈,新元素总是压在栈顶元素之上并成为栈顶元素。初始栈为空,如下图(a)所示。对于元素 1、2、3,依照操作序列push、push、pop、pop、push、pop,可以得到出栈序列213,其过程为:第一个push操作将元素1压入栈中,如下图(b)所示:第二个push操作将元素2压入栈中,如下图(c)所示:第一个pop将栈顶元素2弹出栈,新栈顶元素为1,如下图(d)所示;第二个pop将栈顶元素1弹出栈,导致栈空,如下图(e)所示:其后的push和pop分别将元素3压入和弹出栈,操作结果如下图(f)和(g)所示。

第2题:

若push、pop分别表示入栈、出栈操作,初始栈为空且元素3、2、1依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为__(3)__。

A.321

B.213

C.231

D.123


正确答案:C
经过前两个操作push、push之后,栈里有元素3、2且2在栈顶。接着再进行pop、pop之后,依次把2、3出栈了,栈空了。再接着push、pop,元素1进栈又出栈。因此,最终得到的出栈顺序是231。

第3题:

基于以下描述:有一个初始为空的栈和下面的输入序列A,B,c,D,E,F;现经过如下操作:push,push,push,top,pop,top,pop,push,pus,top,pop,pop,pop,push。

下列哪一个是正确的从栈中删除元素的序列?

A.CBE

B.EBD

C.BEDCA

D.CBEDA


正确答案:D
解析:push、top和pop都是栈的基本操作。其中push是往栈中插入一个元素,top是求栈顶元素的值,pop是从栈中删除一个元素。当初始栈为空,输入序列为A、B、c、D、E、F时,经过题中的每一步操作时,栈中元素依次为:A,AB,ABC,AB(删除c),A(删除B),AD,ADE,AD(删除E),A(删除D),空(删除A),F。所以,从栈中删除的元素序列为CBEDA。

第4题:

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

[说明]

用链式存储结构实现的栈称为链栈。若链栈元素的数据类型为datatype,以LinkStack记链栈结构,其类型定义为:

typedef struct node

{ datatype data;

stmct node * next;

} StackNode, * LinkStack;

由于栈的主要操作都是在栈顶进行的,因此我们把链表的头部作为栈顶。设top为栈顶指针,即:LinkStack top。

下面各函数的功能说明如下:

(1)LinkStack Init_LinkStack():建立并返回空的链栈;

(2)int Empty_LinkStack(LinkStack top):判断top所指链栈是否空;

(3)LinkStack Push_LinkStack(LinkStacktop,datatypex):将数据x压人top所指链栈的栈顶,返回新栈指针;

(4)LinkStack Pop_LinkStack (LinkStacktop, datatype*x):弹出top所指链栈的栈顶元素x,返回新栈指针。

[函数]

LinkStaek Init_LinkStack( )

{ returnNULL;

int Empty_LinkStack ( LinkStaek top)

if(top = = NULL) return 1;

else return 0;

LinkStaek Push_LinkStaek( LinkStaektop, datatype X)

{ StaekNode *s;

s=malloc (sizeof(StaekNode) );

(1)= x;

(2)= top;

(3);

return top;

}

LinkStaek Pop_LinkStack (LinkStacktop, datatype * x)

{ StaekNode *p;

if(top = = NULL) return NULL;

else{

* x =(4);

p = top;

(5);

free (p);

return top;

}

}


正确答案:(1)s->data (2)s->next (3)top=s (4)top->data (5)top=top->next
(1)s->data (2)s->next (3)top=s (4)top->data (5)top=top->next 解析:(1)~(3):LinkStack Push_LinkStack(Link- Stacktop,datmype x)函数的功能是将x压入栈顶,因此首先为其创建一个节点s,使s->data等于x,使s-> next指向原来的栈顶top,最后将,作为新栈的栈顶并返回。
(4)~(5):LinkStack Pop_LinkStaek(LinkStacktop, datatype*x)的功能是弹出原栈顶元素,返回这个元素以及新栈的指针。当原链栈不空时,取出栈顶元素top ->data赋给参量*x作为返回值,将top->next更新为新栈的栈顶,并且释放原来top节点的空间。

第5题:

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

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


正确答案: 正确

第6题:

若push、pop分别表示入栈、出栈操作,初始栈为空且元素1、2、3依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为(29)。

A.321

B.213

C.231

D.123


正确答案:B
解析:栈的运算特点为在同一端插入和删除元素,即先入后出,总是栈顶元素先出栈,新元素总是压在栈顶元素之上并成为栈顶元素。初始栈为空,如下图(a)所示。对于元素 1、2、3,依照操作序列push、push、pop、pop、push、pop,可以得到出栈序列213,其过程为:第一个push操作将元素1压入栈中,如下图(b)所示:第二个push操作将元素2压入栈中,如下图(c)所示:第一个pop将栈顶元素2弹出栈,新栈顶元素为1,如下图(d)所示;第二个pop将栈顶元素1弹出栈,导致栈空,如下图(e)所示:其后的push和pop分别将元素3压入和弹出栈,操作结果如下图(f)和(g)所示。

第7题:

( 3 )有一个初始为空的栈和下面的输入序列 A,B,C,D,E,F , 现经过如下操作: push, push,top,pop, top, push, push, push, top, pop, pop, pop, push 。 上述操作序列完成后栈中的元素列表(从底到顶)为【 3 】 。


正确答案:

第8题:

( 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--];

}


正确答案:

第9题:

●试题七

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

【说明】

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

【程序】

#include<iostream.h>

#include<stdli

B.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) )

cout<< (5) <<" ";

cout<<endl;

}


正确答案:

●试题七

【答案】(1)Max-1(2)-1(3)stpush(ai)(4)!ststackempty()(5)stpop()

【解析】本题用类模板方式定义一个栈类,其中有两个私有数据成员:s[](存放栈元素)top(栈顶元素下标),以及3个公有成员函数:push(元素入栈)pop(元素出栈)stackempty(判断栈是否为空)

在函数push()中,首先要判断是否栈满。栈的大小为Max,数组的下标从0开始,所以栈满的条件是栈顶元素下标为Max-1,所以(1)空应填入"Max-1"。同样,在函数pop()中,首先要判断是否为空栈,由于栈顶初始化为-1,所以(2)空应填入"-1"。

在主函数中,先进行入栈操作,所以(3)空应填入"stpush(ai)"。然后进行出栈操作,判断栈是否为空,调用对象的函数stackempty(),所以(4)空应填入"! ststackempty()"。(5)空处调用出栈函数,所以应填入"stpop()"。