手撸栈

#include<stdio.h>
#include<stdlib.h>
#define init_size  20
#define increment  10
struct stack
{
int *top;
int *base;
int size;
};
void init_stack(stack &s)//创建栈 
{
s.base=(int*)malloc(init_size*sizeof(int));
s.top=s.base;
s.size=init_size;
}
void push(stack &s,int e)//进栈 
{
if(s.top-s.base>=s.size)
{
s.base=(int*)realloc(s.base,(s.size+increment)*sizeof(int));
s.top=s.base+s.size;
s.size+=increment;
}
*s.top=e;
s.top++;
}
int empty(stack s)//查看栈是否为空 
{
if(s.top==s.base)
return 1;
return 0;
}
void pop(stack &s,int &e)//出栈 
{
if(s.top==s.base)
return;
e=*(--s.top);
}
int stack_len(stack s)//查看栈当前容量 
{
return s.top-s.base;
}
void Destroy(stack &s)//销毁一个栈 
{
free(s.base);
s.base=s.top=NULL;
s.size=0;
}
int main()
{
stack s;
int e;
init_stack(&s);
push(s,0);
push(s,1);
while(!empty(s))
{
pop(s,e);
printf("%d,",e);
}
Destroy(s);
}





猜你喜欢

转载自blog.csdn.net/ccsu_cat/article/details/79926838
今日推荐