下面是一个栈类的模板,其中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题:
基于以下描述:有一个初始为空的栈和下面的输入序列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
第3题:
第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题:
若push、pop分别表示入栈、出栈操作,初始栈为空且元素3、2、1依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为__(3)__。
A.321
B.213
C.231
D.123