#include<stdio.h>
#include<stdlib.h>
typedef int Status;
#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define MAXSIZE 100
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
/**栈的创建和初始化**/
Status InitStack(SqStack *s)
{
s->base=(int *)malloc(sizeof(int));
if(!s->base)
exit(OVERFLOW);
s->stacksize=MAXSIZE;
s->top=s->base;
return OK;
}
/**入栈**/
Status Push(SqStack *s,int e)
{
if(s->top-s->base==s->stacksize)
return ERROR;//栈满
*(s->top)++=e;
return OK;
}
/**出栈**/
Status pop(SqStack *s,int *e)
{
if(s->base==s->top)
return ERROR;
*e=*--s->top;
return OK;
}
int main()
{
SqStack s,s1;
int a,i,b,c,d;
printf("创建栈\n");
if(!InitStack(&s))
printf("创建失败\n\n");
else printf("创建成功\n\n");
printf("给栈内填充数据\n");
printf("输入栈内的数据个数:");
scanf("%d",&a);
printf("输入数据:\n");
for(i=0;i<a;i++)
{
scanf("%d",&b);
if(!Push(&s,b))
printf("栈满\n");
}
/*printf("栈顺序输出为:\n");
for(i=0;i<a;i++)
{
if(!pop(&s,&c))
printf("栈空\n");
else
printf("%d ",c);
}*/
if(!InitStack(&s1))
printf("创建栈失败\n\n");
printf("栈按顺序输出为:\n");
for(i=0;i<a;i++)
{
if(!pop(&s,&d))
printf("栈空\n");
else
{
printf("%d ",d);
if(!Push(&s1,d))
printf("栈满\n\n");
}
}
printf("\n");
printf("栈逆序输出为:\n");
for(i=0;i<a;i++)
{
if(!pop(&s1,&d))
printf("栈空\n");
else
printf("%d ",d);
}
printf("\n");
return 0;
}
顺序栈的逆序和顺序输出
最新推荐文章于 2024-03-17 19:59:06 发布