#include <stdio.h> #include <malloc.h> #include <process.h> #define STACK_INIT_SIZE #define
Stackincrement 2 typedef struct sqstack{int *base;
int *top;
int stacksize;
}sqstack;
int Initstack (Sqstack *s) {(*s). base = (int *) malloc (stack_init_size*sizeof (int)); if (!) (
*s). Base) exit (0);
(*s). Top = (*s). Base;
(*s). stacksize = Stack_init_size;
return 1; int Push (Sqstack *s,int e) {if (*s). top-(*s). base>= (*s). stacksize) {(*s). base = (int *) realloc (*s). Base, ((*s). St
acksize+stackincrement) *sizeof (int)); if (!) (
*s). Base) exit (0);
(*s). Top = (*s). Base + (*s). stacksize;
(*s). Stacksize+=stackincrement;
} * ((*s). top) ++= e;
return 1;
int Destroystack (Sqstack *s) {free (*s). Base);
(*s). base = NULL;
(*s). top = NULL;
(*s). stacksize = 0;
return 1;
int Clearstack (Sqstack *s) {(*s). Top = (*s). Base;
return 1;
int Stackempty (Sqstack S) {if (s.top = = s.base) return 1;
else return 0; int Stacklength (Sqstack S) {return S.top-s.basE
int GetTop (Sqstack s,int *e) {if (s.top>s.base) {*e = * (s.top-1);
return 1;
else return 0;
int Pop (Sqstack *s,int *e) {if (*s). Top = = (*s). Base) return 0;
*e = *--(*s). Top;
return 1;
int Stacktraverse (Sqstack s,int (*visit) (int)) {while (s.top>s.base) visit (*s.base++);
printf ("\ n");
return 1;
int visit (int c) {printf ("%d", c);
return 1;
} void Main () {int J;
Sqstack s;
int e;
if (Initstack (&s) ==1) for (j=1;j<12;j++) Push (&S,J);
printf ("The stack number in");
Stacktraverse (S,visit);
printf ("%d", (s.top));
Pop (&s,&e); printf ("Stack empty"?) :%d (1:yes.
0:no),%d\n ", Stackempty (s), e);
GetTop (s,&e);
printf ("The pop number e =%d:the length:%d \ n", E,stacklength (s));
Clearstack (&s);
printf ("After clear, empty?:%d\n", Stackempty (s));
Destroystack (&s);
printf ("After destroy:s.top =%d, S.base =%d,s.stacksize=%d\n", s.top,s.base,s.stacksize);
}