栈:进栈,出栈,取栈顶元素,判断栈是否为空,置空栈,输出元素个数等
注:用switch进行选择操作。
//栈:进栈,出栈,取栈顶元素,判断栈是否为空,置空栈,输出元素个数等。
#include"stdio.h"
#define maxsize 100
typedef struct
{
int datas[maxsize];
int top;
}link;
void menu(void)
{
printf("\n///");
printf("\n 1 判栈空 2 进栈 ");
printf("\n 3 出栈 4 取栈顶元素 ");
printf("\n 5 栈置空 6 求当前元素个数 ");
printf("\n 7 显示栈中元素 8 退出");
printf("\n///");
}
void initialize(link *a)//初始化函数
{
a->top=0;
}
int judge(link *a)//判断栈是否为空
{
if(a->top==0)
return 0;
else
return 1;
}
int enter(link *a,int x)//进栈
{
if(a->top==maxsize-1)
{
printf("此栈已满\n");
return 0;
}
else
{
a->top++;
(a->datas)[a->top]=x;
return 1;
}
}
int out(link *a,int x)//出栈,栈的特点是*后进先出*,出栈的是最后一个元素
{
if(judge(a)==0)
{
printf("此栈为空\n");
return 0;
}
else
{
x=(a->datas)[a->top];
a->top--;
return 1;
}
}
int gettop(link *a,int x)//取栈顶元素
{
if(judge(a)==0)
{
printf("此栈为空\n");
return 0;
}
else
{
x=(a->datas)[a->top];
return 1;
}
}
int number(link *a)//输出元素个数
{
return a->top;
}
void clear(link *a)
{
a->top=0;//置空栈
}
void shuchu(link *a)//输出
{
int i;
if(judge(a)==0)
printf("此栈为空\n");
else
{
for(i=1;i<=a->top;i++)
printf("%5d",a->datas[i]);
}
}
void main()
{
link a;
char yn;
int i,x;
menu();
initialize(&a);//初始化
printf("\n请输入一个序号(1~8)\n");
scanf("%d",&i);
while(i!=8)
{
switch(i)
{
case 1:
if(judge(&a)==0)
printf("此栈为空");
else
printf("此栈不为空");
break;
case 2:
printf("请输入要进栈的元素:\t");
scanf("%d",&x);
if(enter(&a,x)==1)
printf("进栈成功");
else
printf("进栈失败");
break;
case 3:
if(out(&a,x)==1)
printf("出栈成功");
else
printf("出栈失败");
break;
case 4:
if(judge(&a)==1)
printf("栈顶元素为:%d",x);
else
printf("出栈失败");
break;
case 5:
printf("如果要置空当前元素的话,请输入Y或y,若不想就随意输入\n");
getchar();
scanf("%c",&yn);
if(yn=='Y'||yn=='y')//注意字符加单引号
{
clear(&a);
printf("栈已置空");
}
break;
case 6:
printf("栈中元素个数为:%d",number(&a));
break;
case 7:
printf("栈中元素为:");
shuchu(&a);
break;
default:printf("操作有误\n");
}
printf("\n请输入一个序号(1~8)\n");
scanf("%d",&i);
}
}
运行结果如下: