#include<stdio.h>
#include<stdlib.h>
struct stack
{
int buf[6];
int top;//指向栈顶元素
};
short IsFull(struct stack* pa);
void initStack(struct stack* ps);
short push(struct stack* pa,int data);
short IsEmpty(struct stack* pa);
short pop(struct stack* p,int* data);
short stackLength(struct stack* p);
short ClearStack(struct stack* p);
//功能:初始化栈
void initStack(struct stack* ps)
{
if(NULL!=ps)
{
(*ps).top=-1;
}
}
//功能:进栈
short push(struct stack* pa,int data)
{
if(1==IsFull(pa))//栈为满
return 0;
else//栈不为满
{
pa->buf[++pa->top]=data;
return 1;//压栈成功
}
}
//功能:判断栈是否为满
short IsFull(struct stack* pa)
{
if(pa->top==5)
{
return 1;
}
else
return 0;
}
//功能:判断是否为空
short IsEmpty(struct stack* pa)
{
if(pa->top==-1)
return 1;
else
return 0;
}
//功能:出栈
short pop(struct stack* p,int* data)
{
if(IsEmpty(p)==1)//栈为空
return 0;
else//栈非空
{
*data=p->buf[p->top--];
return 1;
}
}
//次栈栈顶元素
short Secondary(struct stack* p,int *data)
{
if(IsEmpty(p)==0)
{
*data=p->buf[(p->top)-1];
return 1;
}
else
{
return 0;
}
}
//功能:栈元素的个数:
short StackLength(struct stack* p)
{
int num=p->top+1;
return num;
}
//清空栈
short ClearStack(struct stack* p)
{
p->top=-1;
}
void main()
{
//定义变量
struct stack s;
initStack(&s);
int opt;
printf("***功能按钮介绍***\n");
printf("0-进栈\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("Please Input:");
scanf("%d",&opt);
switch(opt)
{
case 0://进栈
{
int data;
printf("请输入值:");
scanf("%d",&data);
if(1==push(&s,data))
{
printf("压栈成功\n");
getchar();
}
else
printf("压栈失败\n");
}break;
case 1://出栈
{
int a;
if(pop(&s,&a)==0)
printf("栈为空,无法出栈!\n");
else
printf("%d\n",a);
}break;
case 2://栈元素的个数
{
printf("当前栈元素个数为:%d\n",StackLength(&s));
}break;
case 3://判断栈是否为满
{
if(IsFull(&s)==5)
printf("栈已满\n");
else
printf("栈未满\n");
}break;
case 4://判断栈是否为空
{
if(IsEmpty(&s)==1)
printf("空栈,无值\n");
else
printf("栈有值\n");
}break;
case 5://清空栈
{
ClearStack(&s);
printf("栈已清空\n");
}break;
case 6:
{
int b=0;
if(Secondary(&s,&b)==1 && StackLength(&s)>1)
printf("次栈顶元素为:%d\n",b);
else
printf("栈中元素小于2个,没有次栈顶元素\n");
}break;
case 7:
{
printf("退出程序\n");
return;
}
default:
printf("系统错误");
}
}
}
栈(例题详解,栈的思想,栈的基本功能)
猜你喜欢
转载自blog.csdn.net/cs13797778767/article/details/81222816
今日推荐
周排行