#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible 1
#define overflow 0
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
//函数说明
createstack(sqstack *s);
stackpush(sqstack *s);
show(sqstack *s);
stackpop(sqstack *s);
main()
{
int j; sqstack s; createstack(&s);
do
{
printf(" ╔-----------------------------------------------╗\n"); //显示一个简易菜单
printf(" ┆ main menu ┆\n");
printf(" ┆ 1 --- 创建(Insert) ┆\n");
printf(" ┆ 2 --- 入栈(Update) ┆\n");
printf(" ┆ 3 --- 出栈(Delete) ┆\n");
printf(" ┆ 4 --- 退出( Show ) ┆\n");
printf(" ╚-----------------------------------------------╝\n");
printf("请输入所要进行的操作序号: ");
scanf("%d",&j); //接受用户的选择
switch(j) //接受用户的函数
{case 1:{createstack(&s);printf("创建成功!\n");
break;}
case 2:{stackpush(&s);show(&s);
break;}
case 3:{stackpop(&s);show(&s);
break;}
case 4:break;
default:printf("错误选择!请重选\n");break;
}
}while(j!=4); //直到i被赋值为4
return 0;
}
//构造一个空栈
createstack(sqstack *s)
{
s->base=(int *)malloc(50*sizeof(int)); //开始分配50个整形空间
if(!s->base) exit(overflow);
s->top=s->base;
s->stacksize=50;
return ok;
}
//插入新元素为栈顶元素
stackpush(sqstack *s)
{
int e;
if(s->top - s->base>=50){//栈满 ,追加存储空间
s->base = (int *)realloc(s->base,(50+10)*sizeof(int));
if(!s->base) exit(overflow);//存储分配失败
s->top = s->base + 50;//新扩充空间后的栈顶指针位置
s->stacksize += 10;
}
printf("请输入要入栈的值:");
scanf("%d",&e);
*s->top++ = e;
return ok;
}
//出栈
stackpop(sqstack *s)
{
if(s->base == s->top) {printf("栈为空!不能出栈!"); return error;}
--s->top;
return ok;
}
//打印栈
show(sqstack *s)
{
int *ww;
printf("The stack is :");
ww=s->base;
while(ww!=s->top){
printf(" %d ",*ww++);
}
printf("\n");
}
C语言模拟顺序栈的创建、入栈、出栈操作
最新推荐文章于 2024-08-02 17:58:40 发布