#include <stdio.h>
#include <stdlib.h>
#define stackintitsize 100
#define stackincrenment 10
typedef struct {
int a;
}SElemType;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}Sqstack;
Sqstack* InitStack(void);
int JudegeStackEmpty(Sqstack *S);
int LenStack (Sqstack *S);
void ClearStack (Sqstack *s);
void DestroyStack (Sqstack *S);
void Push(Sqstack *S, SElemType e);
SElemType POP(Sqstack *S);
int main () {
Sqstack *S;
S = InitStack();
DestroyStack(S);
}
Sqstack* InitStack(void) {
Sqstack *S;
S = (Sqstack*)malloc(sizeof(Sqstack));
S->base = (SElemType*)malloc(stackintitsize*sizeof(SElemType));
if (!S->base) {
exit(0);
}
S->top = S->base;
S->stacksize = stackintitsize;
return S;
}
int JudegeStackEmpty(Sqstack *S) {
int ret = 0;
if (S->base == S->top) {
ret = 1;
}
return ret;
}
int LenStack (Sqstack *S) {
return S->top-S->base;
}
void ClearStack (Sqstack *s) {
if (s->base) {
s->top = s->base;
}
}
void DestroyStack (Sqstack *S) {
if (S->base) {
free(S->base);
S->stacksize = 0;
S->top = S->base = NULL;
free(S);
S = NULL;
}
}
void Push(Sqstack *S, SElemType e) {
if (S->top-S->base >= S->stacksize) {
S->base = (SElemType *)realloc (S->base, (S->stacksize+stackincrenment)*sizeof (SElemType));
if (!S->base) {
exit(0);
}
S->top = S->base+S->stacksize;
S->stacksize += stackincrenment;
}
*S->top++=e;
}
SElemType POP(Sqstack *S) {
SElemType e;
if (S->top == S->base) {
exit(0);
}
S->top--;
e=*S->top;
}