#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef struct{
int data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack *&s){
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
bool StackEmpty(SqStack *&s){
return (s->top ==-1);;
}
void PushStack(SqStack *&s,int x){
if(s->top==MaxSize-1)
return ;
s->data[++s->top]=x;
}
void PopStack(SqStack *&s,int &x){
if(s->top==-1)
return ;
x=s->data[s->top--];
}
void GetTop(SqStack *&s,int &x){
if(s->top==-1)
return ;
x=s->data[s->top];
}
void DestroyStack(SqStack *&s)
{
free(s);
}
void AlterStack(SqStack *&s,int x){
if(s->top==-1)
return ;
s->data[s->top]=x;
}
int main()
{
SqStack *s;
int a,x,e;
printf("<--------顺序栈的基本操作--------->\n");
printf("1:初始化顺序栈\n");
printf("2:判断顺序栈是否为空\n");
printf("3:入栈操作\n");
printf("4:出栈操作\n");
printf("5:读取栈顶元素\n");
printf("6:销毁栈\n");
printf("7:修改栈顶元素\n");
while(1){
printf("请输入要执行操作的序号:");
scanf("%d",&a);
switch(a){
case 1:InitStack(s);
printf("初始化栈成功\n");
break;
case 2:if(StackEmpty(s))
printf("该栈为空\n");
else
printf("该栈不为空\n");
break;
case 3:printf("请输入要入栈的数据\n");
scanf("%d",&x);
PushStack(s,x);
printf("入栈成功\n");
break;
case 4:PopStack(s,x);
printf("出栈的数据是:%d\n",x);
break;
case 5:GetTop(s,e);//不用x是因为之前已经给x赋值了,所以继续会导致数据是之前的
printf("栈顶元素是:%d\n",e);
break;
case 6:DestroyStack(s);
printf("销毁栈成功\n");
break;
case 7:printf("要修改的栈顶元素值是:");
scanf("%d",&x);
AlterStack(s,x);
printf("修改成功\n");
break;
}
}
return 0;
}
顺序栈的基本操作
最新推荐文章于 2025-01-15 09:08:06 发布
1510

被折叠的 条评论
为什么被折叠?



