下图表示顺序栈中数据元素和栈指针之间的对应关系
#include#include #define SIZE 100 //栈的最大长度#define STEPTSIZE 10 //栈每次增长的长度typedef char ElemType;/*栈的定义*/typedef struct stack{ ElemType *base; ElemType *top; int stackSize;}stack;/*栈顶初始化*/void initAStack(stack *s){ s->base =(ElemType *)malloc(SIZE*sizeof(ElemType)); if(s->base == NULL) exit(0); s->top = s->base; s->stackSize = SIZE;}/*进栈*/void push(stack *s,ElemType e){ /*栈满*/ if( (s->top - s->base) == SIZE){ s->base = (ElemType *)realloc(s->base,(SIZE+STEPTSIZE)*sizeof(ElemType)); s->stackSize += STEPTSIZE; } *(s->top) =e; s->top++; }/*遍历*/void traverseStack(stack s){ while(s.top != s.base){ s.top--; printf("%c\t",*s.top); } printf("\n"); }/*出栈*/void pop(stack *s){ char *tem; tem = s->top; s->top--; free(tem);}void main(){ stack s; initAStack(&s); push(&s,'a'); push(&s,'b'); push(&s,'c'); push(&s,'d'); push(&s,'e'); traverseStack(s); pop(&s); traverseStack(s); }