- #include "stdio.h"
- #include "math.h"
- #define STACK_INIT_SIZE 20
- #define STACKINCREMENT 10
- typedef char ElemType;
- typedef struct{
- ElemType *base;
- ElemType *top;
- int stacksize;
- }sqStack;
- initStack(sqStack *s)
- {
- /*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
- s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
- if(!s->base) exit(0); /*分配空间失败*/
- s->top = s->base; /*最开始,栈顶就是栈底*/
- s->stacksize = STACK_INIT_SIZE; /*最大容量为STACK_INIT_SIZE */
- }
- Push(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) exit(0); /*存储分配失败*/
- s->top = s->base + s->stacksize;
- s->stacksize = s->stacksize + STACKINCREMENT; /*设置栈的最大容量*/
- }
- *(s->top) = e; /*放入数据*/
- s->top++;
- }
- Pop(sqStack *s , ElemType *e){
- if(s->top == s->base) return;
- *e = *--(s->top);
- }
- int StackLen(sqStack s){
- return (s.top - s.base) ;
- }
- //该片段来自于http://www.codesnippet.cn/detail/3112201411442.html
来源: http://www.codesnippet.cn/detail/3112201411442.html