- #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 的值也没有发生变化. 之前的值都可以正常输出.
来源: http://www.bubuko.com/infodetail-3279970.html