下图表示顺序栈中数据元素和栈指针之间的对应关系
#include<stdio.h> #include<malloc.h> #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); }