顺序栈基本操作
代码如下:
#include<stdio.h>
#include<malloc.h>
#define STACK_INITSIZE 20
#define STACK_INCREASEMENT 5
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct //定义数据类型
{
ElemType *elem;
int top;
int stacksize;
}Seqstack;
int menu() //菜单
{
int i;
printf("==========顺序栈==========\n");
printf("=======1.初始化顺序栈=====\n");
printf("=======2.顺序栈入栈=======\n");
printf("=======3.顺序栈出栈=======\n");
printf("=======4.取栈顶元素=======\n");
printf("=======5.判断栈是否为空===\n");
printf("=======6.求栈的深度=======\n");
printf("=======7.清空栈元素=======\n");
printf("请输入您的选择(1--7):");
scanf("%d",&i);
return i;
}
int InitStack(Seqstack *p) //初始化栈
{
p->elem=(ElemType *)malloc(sizeof(Seqstack)*STACK_INITSIZE);
p->top=0;
p->stacksize=STACK_INITSIZE;
return OK;
}
int push(Seqstack *p,int e) //入栈
{
int i;
if(p->top>p->stacksize)
p->elem=(ElemType *)malloc(sizeof(ElemType)*STACK_INITSIZE+STACK_INCREASEMENT);
p->elem[p->top]=e;
p->top=p->top+1;
return OK;
}
int pop(Seqstack *p,int *e) //出栈
{
*e=p->elem[p->top--];
p->top=p->top-1;
return OK;
}
int GetTop(Seqstack *p,int *e) //取栈顶元素
{
*e=p->elem[p->top--];
return OK;
}
int seqstackempty(Seqstack *p) //判空操作
{
if(p->top<=0)
return OK;
else
return ERROR;
}
int Depthstack(Seqstack *p) //求栈的深度
{
return p->top;
}
int clearseqstack(Seqstack *p) //栈的清空
{
p->top=0;
return OK;
}
int main()
{
int n,i,e,*q,b;
Seqstack *p;
while(1)
{
i=menu();
switch(i)
{
case 1:system("cls");
b=InitStack(&p);
if(b==1)
printf("初始化成功\n");
if(b==0)
printf("初始化呢失败\n");
break;
case 2:system("cls");
printf("请输入入栈的元素的值\n");
scanf("%d",&e);
b=push(&p,e);
if(b==1)
printf("输入成功\n");
if(b==0)
printf("输入失败\n");
break;
case 3:system("cls");
b=pop(&p,&q);
if(b==1)
printf("出栈成功\n");
if(b==0)
printf("出栈失败\n");
printf("%5d\n",q);
break;
case 4:system("cls");
b=GetTop(&p,&e);
if(b==1)
printf("取元素成功\n");
if(b==0)
printf("取元素失败\n");
printf("%5d\n",e);
break;
case 5:system("cls");
b=seqstackempty(&p);
if(b==1)
printf("顺序栈为空栈\n");
if(b==0)
printf("顺序栈不为空栈\n");
break;
case 6:system("cls");
b=Depthstack(&p);
printf("栈的深度为%d\n",b);
break;
case 7:system("cls");
b=clearseqstack(&p);
if(b==1)
printf("顺序栈已经清空\n");
break;
}
}
}