/*
*顺序栈的创建
*出栈
*入栈
*取栈顶元素
*判断栈空
*/
#include
#define MAXSIZE 1024
typedef int element;
typedef struct sequstack
{
element data[MAXSIZE];
int top;
}Sequ_Stack;
Sequ_Stack*creat_stack();//顺序栈的创建
int full_stack(Sequ_Stack*s);
int empty_stack(Sequ_Stack*s);
int length_stack(Sequ_Stack*s);
int push_stack(Sequ_Stack*s,element x);//入栈
int pop_stack(Sequ_Stack*s,element*x);//出栈
int get_data(Sequ_Stack*s,element *x);
void main()
{
Sequ_Stack*s;
element x;
element y;
element z;
s=creat_stack();
if(s->top==-1)
printf("顺序栈创建失败:\n");
else
printf("顺序栈创建成功:\n");
if(full_stack(s)==1)
printf("顺序栈已经满:\n");
else
printf("顺序栈没有满:\n");
if(empty_stack(s))
printf("栈为空;\n");
else
printf("栈不为空:\n");
printf("顺序栈的长度为:%d\n",length_stack(s));
printf("请输入要入栈的数据:\n");
scanf("%d",&x);
if(push_stack(s,x))
printf("入栈成功:\n");
else
printf("入栈失败:\n");
if(pop_stack(s,&y)==0)
printf("出栈失败:\n");
else
printf("出栈的元素为:%d\n",y);
if(get_data(s,&z)==0)
printf("取栈顶元素失败:\n");
else
printf("栈顶元素为:%d\n",z);
}
Sequ_Stack*creat_stack()//顺序栈的创建
{
Sequ_Stack*s;
element x;
s=(Sequ_Stack*)malloc(sizeof(Sequ_Stack));
if(s==NULL)
s->top=-1;
else
s->top=0;
int i=0;
printf("请输入数据:\n");
scanf("%d",&x);
while(x!=0)
{
s->data[i++]=x;
s->top++;
scanf("%d",&x);
}
return s;
}
int full_stack(Sequ_Stack*s)//判断栈是否满
{
if(s->top+1>=MAXSIZE)
return 1;
else
return 0;
}
int empty_stack(Sequ_Stack*s)//判断栈是否为空
{
if(s->top==-1)
return 1;
else
return 0;
}
int length_stack(Sequ_Stack*s)
{
if(s->top==-1)
return 0;
else
return (s->top+1);
}
int push_stack(Sequ_Stack*s,element x)//入栈
{
if(s->top+1>=MAXSIZE)
return 0;
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
int pop_stack(Sequ_Stack*s,element*x)//出栈
{
if(s->top==-1)
return 0;
else
{
*x=s->data[s->top];
s->top--;
return 1;
}
}
int get_data(Sequ_Stack*s,element *x)
{
if(s->top==-1)
return 0;
else
{
*x=s->data[s->top];
return 1;
}
}