数据结构的栈的操作,仅作记录学习中用,欢迎大家指导。
#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
#define addsize 10
typedef struct
{
int *base;
int *top;
int stacksize;
} sqstack;
//初始化栈
int initstack(sqstack *s)
{
s->base=(int *)malloc(maxsize*sizeof(int));
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=maxsize;
return 0;
}
//取栈顶元素
int gettop(sqstack s,int *e)
{
if(s.base==s.top)
return 0;
*e=*(s.top-1);
return 0;
}
//进栈
int push(sqstack *s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(int *)realloc(s->base,(maxsize+addsize)*sizeof(int));
if(!s->base)
exit(0);
s->stacksize=s->stacksize+addsize;
}
*s->top=e;
s->top++;
return 0;
}
//出栈
int pop(sqstack *s,int *e)
{
if(s->base==s->top) return 0;
s->top--;
//printf("%d\n",*s->top);
*e=*s->top;
return 0;
}
//主函数
int main()
{
int m=0;
int n=0;
int e=0;
sqstack s;
initstack(&s);
push(&s,1);
push(&s,2);
push(&s,3);
gettop(s,&m);
pop(&s,&e);
gettop(s,&n);
printf("%d\n",m);
printf("%d\n",e);
printf("%d\n",n);
return 0;
}