首先先定义一个栈
#define SIZE 20
#define ADD_SIZE 10
typedef char ElemType;
typedef struct stack
{
ElemType *top; //定义一个头指针
ElemType *base; //定义一个尾指针
int stack_size; //栈的长度,初始化为10
};
初始化一个栈
void initstack(stack *s)
{
s->base=(ElemType *)malloc(SIZE*sizeof(ElemType));
if(!s->base) //分配失败,退出
{
exit(0);
}
s->top=s->base; //使头指针指向尾指针
s->stack_size=SIZE; //定义栈的长度
}
入栈的操作
void push(stack *s,char e)
{
if(s->top-s->base>=SIZE)
{
s->base=(ElemType *)realloc(s->base,(SIZE+ADD_SIZE)*sizeof(ElemType)); //栈的长度不够,再增加长度
if(!s->base) //分配失败,退出
{
exit(0);
}
}
*(s->top)=e; //把先进入的数据插入
s->top++; //头指针向上走一步,为下次插入准备
}
出栈的操作
void pop(stack *s,char *e)
{
if(s->top==s->base) //当头指针和尾指针相同时,表示到了栈底,返回退出
{
return;
}
*e=*--(s->top); //出栈
}
测量栈当前的长度
int stacklen(stack s)
{
return (s.top-s.base); //直接头指针减去尾指针
}