[2022/3/17]栈示例程序
栈示例程序,包含栈的基本功能:进栈,出栈,显示栈顶元素,输出所有栈元素
#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 100
typedef int datatype;
typedef struct{
datatype data[MAXLEN];
int top;
}stack;//栈结构体
//初始化栈
void init_stack(stack *s)
{
s->top = -1;//top为-1表示栈空
}
//判断栈是否为空
//空返回1,否则0
int empty_stack(stack *s)
{
if(s->top == -1)
{
return 1;
}
else
{
return 0;
}
}
//判断栈是否为满
//满返回1,否则0
int full_stack(stack *s)
{
if(s->top == MAXLEN-1)
{
return 1;
}
else
{
return 0;
}
}
//进栈
//成功返回1,否则0
int push(stack *s, datatype x)
{
if(full_stack(s))
{
printf("栈满!\n");
return 0;
}
else
{
s->top++;
s->data[s->top] = x;
return 1;
}
}
//出栈
//成功返回1,否则0
int pop(stack *s, datatype *x)
{
if(empty_stack(s))
{
printf("栈空!\n");
return 0;
}
else
{
*x = s->data[s->top];
s->top--;
return 1;
}
}
//取栈顶元素
int get_top(stack *s, datatype *x)
{
if(empty_stack(s))
{
printf("栈空!\n");
return 0;
}
else
{
*x = s->data[s->top];
return 1;
}
}
//输出栈
void output(stack s)
{
for(int i = 0; i <= s.top; i++)
{
printf("%d\t",s.data[i]);
}
printf("\n输出完成\n");
}
int main()
{
stack a;
init_stack(&a);
int tmp = 0;
printf("1.进栈\n"
"2.出栈\n"
"3.显示栈顶元素\n"
"4.输出栈\n");
char b;
while(1)
{
scanf("%c",&b);
switch(b)
{
case '1':
printf("\n输入需要插入的数字\n");
scanf("%d",&tmp);
if(push(&a,tmp))
{
printf("操作成功\n");
}
break;
case '2':
if(pop(&a,&tmp))
{
printf("数字%d从栈中移除\n",tmp);
printf("操作成功\n");
}
break;
case '3':
if(get_top(&a,&tmp))
{
printf("栈顶元素为%d\n",tmp);
printf("操作成功\n");
}
break;
case '4':
output(a);
break;
}
}
}
作者:WWQ