#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;
}
#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;
}