#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef int Elemtype;//必须加上;
//定义顺序栈的储存结构
typedef struct
{
Elemtype stack[MAX];
int top;
}SqStack;
//初始化
void InitStack(SqStack *p)
{
if(!p)
printf("内存分配失败!");
p->top=-1;
}
//入栈
void Push(SqStack *p,Elemtype x)
{
if(p->top<MAX-1)
{
p->top=p->top+1;//???????????????????????
p->stack[p->top]=x;
}
else
printf("Overflow!\n");
}
//出栈
Elemtype Pop(SqStack *p)
{
Elemtype x;
if(p->top>=0)
{
x=p->stack[p->top];
printf("以前的栈顶数据元素%d已经被删除!\n",p->stack[p->top]);
p->top=p->top-1;
return x;
}
else
{
printf("underflow!\n");
return 0;
}
}
//获取栈顶元素
Elemtype GetTop(SqStack *p)
{
Elemtype x;
if(p->top>=0)
{
x=p->stack[p->top]; printf("\n栈顶元素为:%d\n",x);
return x;
}
else
{
printf("Underflow!\n");
return 0;
}
}
//遍历
void OutStack(SqStack *p)
{
int i;
printf("\n");
if(p->top<0)
printf("这是一个空栈!");
printf("\n");
for(i=p->top;i>=0;i--)
printf("第%d个元素是: %5d\n",i,p->stack[i]);
}
//z置空栈
void setEmtpy(SqStack *p)
{
p->top=-1;
}
void main()
{
SqStack *q;
int cord;
Elemtype a;
printf("\n第一次使用必须初始化\n");
do{
printf("\n\n");
printf("\n-------------主菜单-------------\n");
printf("\n 1.初始化顺序栈 \n");
printf("\n 2.插入一个元素\n");
printf("\n 3.删除栈顶元素\n");
printf("\n 4.取栈顶元素\n");
printf("\n 5.置空顺序栈\n");
printf("\n 6.结束程序运行\n");
printf("\n---------------------------------\n");
printf("\n请输入你的选择(1.2.3.4.5.6)\n");
scanf("%d",&cord);
switch(cord)
{
case 1:{
q=(SqStack *)malloc(sizeof(SqStack));
InitStack(q);
OutStack(q);
}break;
case 2:{ printf("请输入要插入的元素:a=");
scanf("%d",&a);
Push(q,a);
OutStack(q);
}break;
case 3:{
Pop(q);
OutStack(q);
}break;
case 4:{
GetTop(q);
OutStack(q);
}break;
case 5:{
setEmtpy(q);
printf("\n顺序栈已被置空!、\n");
OutStack(q);
}break;
case 6: {
exit(0);
}
}
}while(cord>0&&cord<=6);
}
栈的顺序表示和实现
最新推荐文章于 2021-05-24 23:47:24 发布