#include<stdio.h> #include<stdlib.h> #define ok 1 #define error 0 #define overflow -2 typedef struct { int *base,*top; int stacksize; }sqstack; int initstack(sqstack *s) { s->base=(int *)malloc(10*sizeof(int)); //预先为s->base所指向的内存空间分配10个int类型的存储空间 if(!s->base)return overflow; s->top=s->base; s->stacksize=10; return ok; } int gettop(sqstack *s,int *e) { if(s->top==s->base)return error; *e=*(s->top-1); return ok; } int pop(sqstack *s,int *e) { if(s->top==s->base)return error; *e=*--s->top; return ok; } int push(sqstack *s,int e) { if(s->top-s->base>=s->stacksize) { s->base=(int *)realloc(s->base,(s->stacksize+10)*sizeof(int)); //如果栈满,则再次给s->base所指向的内存空间分配10个int类型的存储空间 if(!s->base)return overflow; s->top=s->base+s->stacksize; s->stacksize++; } *s->top++=e; return ok; } void main() { sqstack *s; int i,j; initstack(&s); push(&s,1); push(&s,2); push(&s,3); push(&s,4); push(&s,5); push(&s,6); push(&s,7); push(&s,8); push(&s,9); push(&s,10); push(&s,11); push(&s,12); push(&s,13); push(&s,14); push(&s,15); i=gettop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); i=pop(&s,&j); printf("i=%d,j=%d\n",i,j); }
测试函数中定义了四个函数:initstack 构造一个空栈 gettop 获取栈顶元素 push 插入一个元素 pop 弹出栈顶元素
程序运行结果如下:
i的值表示pop,gettop的返回值,可以发现最后三次i的值为0,表示栈空,j的值也没有发生变化。之前的值都可以正常输出。
原文:https://www.cnblogs.com/P201821440033/p/11827324.html