下面是一个栈类的模板,其中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题:
第2题:
若push、pop分别表示入栈、出栈操作,初始栈为空且元素3、2、1依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为__(3)__。
A.321
B.213
C.231
D.123
第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
第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;
}
}
第5题:
此题为判断题(对,错)。
第6题:
若push、pop分别表示入栈、出栈操作,初始栈为空且元素1、2、3依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为(29)。
A.321
B.213
C.231
D.123
第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)st.push(a[i])(4)!st.stackempty()(5)st.pop()
【解析】本题用类模板方式定义一个栈类,其中有两个私有数据成员:s[](存放栈元素)和top(栈顶元素下标),以及3个公有成员函数:push(元素入栈)、pop(元素出栈)和stackempty(判断栈是否为空)。
在函数push()中,首先要判断是否栈满。栈的大小为Max,数组的下标从0开始,所以栈满的条件是栈顶元素下标为Max-1,所以(1)空应填入"Max-1"。同样,在函数pop()中,首先要判断是否为空栈,由于栈顶初始化为-1,所以(2)空应填入"-1"。
在主函数中,先进行入栈操作,所以(3)空应填入"st.push(a[i])"。然后进行出栈操作,判断栈是否为空,调用对象的函数stackempty(),所以(4)空应填入"! st.stackempty()"。(5)空处调用出栈函数,所以应填入"st.pop()"。