#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define STACK_INT_SIZE 10
#define STACKINCREMENT 5
typedef int ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
} SqStack;
int initStack(SqStack *s);
int emptyStack(SqStack *s);
int pushStack(SqStack *s, ElemType e);
int popStack(SqStack *s,ElemType *e);
//初始化栈
int initStack(SqStack *s)
{
s->base=(ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType));
if(!s->base)return ERROR;
s->top=s->base;
s->stacksize=STACK_INT_SIZE;
return OK;
}
//判断栈空
int emptyStack(SqStack *s)
{
if(s->base==s->top)
return 1;
else
return 0;
}
//入栈
int pushStack(SqStack *s, ElemType e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(ElemType*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)return ERROR;
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*s->top++=e;
return OK;
}
//出栈
int popStack(SqStack *s,ElemType *e)
{
if(s->top==s->base)return ERROR;
--s->top;
*e=*s->top;
return OK;
}
int main()
{
SqStack s;
ElemType e;
if(initStack(&s))
{
//补充代码:实现读入数据入栈和出栈
while(scanf("%d",&e)==1)
pushStack(&s,e);
while(emptyStack(&s)==0)
{
popStack(&s,&e);
printf("%d ",e);
}
}
return 0;
}
顺序栈实现
于 2022-10-31 23:06:35 首次发布