简单的栈的实现

#include <stdio.h>
#include <stdlib.h>
typedef struct stack{
int *buff;
int index;
int maxSize;
}Stack,*pStack;


int count(Stack *pStack)
{
if(NULL==pStack)
{
return 1;

return pStack->index;
}


int maxSize(Stack *pStack)
{
if(NULL==pStack)
{
return 1;

return pStack->maxSize;
}
int setMaxSize(Stack *pStack,int maxSize)
{
if(NULL==pStack)
{
return 1;

if(maxSize>pStack->maxSize)
{
//提前free以前分配的内存 ,别造成内存泄露
free(pStack->buff); 
pStack->buff=(int*)malloc(sizeof(int)*maxSize);
if(NULL==pStack->buff)
{
free(pStack);
return -1;
}
}
pStack->maxSize=maxSize; 
}




int push(Stack *pStack,int data)
{
    if(NULL==pStack||pStack->index==pStack->maxSize)
{
return 1;

if(NULL==pStack->buff)
{
free(pStack);
return 2;
}
Stack s=*pStack;
int index=s.index;
s.buff[index]=data;
s.index++;
 *pStack=s;
return 0;
}
int pop(Stack *pStack,int *pdata)
{
if(NULL==pStack||NULL==pdata)
{
return 1;

if(pStack->index>0)
      {
       Stack s=*pStack;
        s.index--;
   int index=s.index;
   *pdata=s.buff[index];
     *pStack=s;
  return 0;
 }
}


Stack *createStack(int maxSize)
{
pStack p=(pStack)malloc(sizeof(Stack));
if(NULL==p)
{
return NULL;
}
p->buff=(int*)malloc(sizeof(int)*maxSize);
if(NULL==p->buff)
{
free(p);
return NULL;
}
p->index=0;
p->maxSize=maxSize;
return p;
}
int destroyStack(Stack *pStack)
{
if(NULL==pStack)
{
return 1;

if(NULL==pStack->buff)
{
return 2;
}
free(pStack->buff);
free(pStack);
pStack==NULL;
return 0;
}








int main(){
int n = 3;
     int i=0;
Stack *s = createStack(n);
if(s == NULL){
return 1;
}


push(s,1);
push(s,2);
push(s,3);


for( i = 0;i<3;i++){
int data = 0;
int ret = pop(s,&data);
if(ret == 0){

printf("data = %d\n",data);
}

}


destroyStack(s);
s = NULL;
for( i = 0;i<3;i++)
{
int data = 0;
int ret = pop(s,&data);
if(ret == 0)
{

printf("data = %d\n",data);
}

}

   return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值