006 -- Stack_define a stack, push/pop a element to a Stack
000-- Define a Stack
typedef struct{ ElemType *base; ElemType *top; int stackSize; }sqStack;
#define STACK_INIT_SIZE 100
initStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType))
if(!s)
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
001-- Push a data into the Stack
#define STACKINCREMENT 10 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; //set the pointer of top s->stackSize = s->stackSize + STACKINCREMENT; //set the current size of the Stack } *(s->top) = e; s->top++; }
002-- pop a data out from Stack
Pop(sqStack *s, ElemType *e) { if(s->top == s->base) return; *e = *--(s->top); }
003--clear a stack
ClearStack(sqStack *s){ s->top = s->base; }
004--destroy a stack
DestroyStack(sqStack *s) { int i, len; len = s->stackSize; for (i=0;i<len;i++) { free(s->base); s->base ++; } s->base = s->top = NULL; s->stackSize = 0; }