#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 10 //初始化栈的最大长度
#define STACKINCREMENT 10 //栈长度不够时要增加的长度
typedef int ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
ElemType stack_size; //栈容量
}SqStack;
//初始化栈
int InitStack(SqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!s->base)
{
return 0;
}
s->top = s->base;
s->stack_size = STACK_INIT_SIZE;
return 1;
}
//入栈
int Push(SqStack *s,ElemType e)
{
//如果栈的长度不够,重新开辟,增大长度
if(s->top - s->base >= s->stack_size)
{
s->base = (ElemType *)realloc(s->base,(s->stack_size + STACKINCREMENT) * sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->top = s->base + s->stack_size;
s->stack_size += STACKINCREMENT;
}
*s->top = e;
s->top++;
return 1;
}
//出栈
int Pop(SqStack *s,ElemType *e)
{
if(s->base == s->top)
{
return 0;
}
s->top--;
*e = *s->top;
return 1;
}
//由栈顶开始遍历栈
void print_stack(SqStack *s)
{
int *p;
if(s->base == s->top)
{
printf("空栈!");
}
else
{
p = s->top;
while(p != s->base)
{
p--;
printf("%d\n",*p);
}
}
}
void main()
{
SqStack s;
int i,e;
int a[8] = {1,2,3,4,5,6,7,8};
InitStack(&s);
printf("入栈:\n");
for(i=0;i<8;i++)
{
Push(&s,a[i]);
printf("%d ",a[i]);
}
printf("\n");
//print_stack(&s); //由栈顶开始遍历栈
printf("出栈:\n");
for(i=0;i<8;i++)
{
Pop(&s,&e);
printf("%d ",e);
}
printf("\n");
}