文档介绍:实验二栈和行列(总13页)
se=NULL;
s->top=NULL;
s->stacksize=O;
returnOk;
}
〃获得栈顶元素
StatusGetTop(SqStack*s,SEIemType&e)
{
if(s->top==s->base)returnError;
e=*(s->top-1);
returnOk;
}
〃压栈
StatusPush(SqStack*s,SEIemTypee)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(SEIemType*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s->base)
{
puts("存储空间分派失败!“);
returnError;
}
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*s->top++=e;returnOk;
}
〃弹栈
StatusPop(SqStack*s,SEIemType*e)
{
if(s->top==s->base)returnError;-s->top;
*e=*(s->top);
returnOk;
〃遍历栈
StatusStackTraverse(SqStack*s,Status(*visit)(SEIemType))
{
SEIemType*b=s->base;
SEIemType*t=s->top;
while(t>b)
visit(*b++);
printfC'Xn");
returnOk;
}
Statusvisit(SEIemTypec)
{
printf(H%du,c);
}
intmain( )
{
SqStacka;
SqStack*s=&a;
SEIemTypee;
InitStack(s);
intn;
puts("请输入要进栈的个数:“);
scanff^d",&n);
while(n-)
{
intm;
scanf(%“d”,&m);
Pushfs,m);
}
StackTraverse(s,visit);puts(;Pop?&e);“”)
printf(,,%d\n,,/e);
printf(%“d\n",*s->top);
Destroy(s);
return0;
[实验2]栈的链式表示和实现
实验内容与要求:
编写一个程序实现链栈的各样基本运算,并在此基础上设计一个主程序,达成如下功能:
1)初始化链栈
2)链栈置空
3)入栈
4)出栈
5)取栈顶元素
6)遍历链栈
剖析:
链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。注意:
(1)Linkstack构造种类的定义能够方便地在函数体中改正top指针本身
2)若要记录栈中元素个数,可将元素个数属性放在LinkStack种类中定义。
3)链栈中的结点是动向分派的,所以能够不考虑上溢。
#inelude<>
#inelude<>
#defineERROR0
#defineOK1
#defineTRUE1
#defineFALSE0
typedefintElemType;
typedefintStatus;
typedefstructnode
{
ElemTypedata;
structnode*next;
}StackNode;
typedefstruct
{
StackNode*top;
}LinkStack;