今天差点忘了,我希望我一直有热情,一直有激情!
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define INITSIZE 20
#define ADDSIZE 10
typedef struct{
int *top;
int *base;
int size;
}SqStack;
int INIT(SqStack *S)
{
int *q=(int *)malloc(sizeof(int)*INITSIZE);
if(q==NULL)
{
return -1;
}
S->top=q;
S->base=q;
S->size=INITSIZE;
return 0;
}
int PUSH(SqStack *S,int elem)
{
if(S->base==NULL)
{
return -1;//栈不存在
}
if(S->top-S->base==S->size)//栈满了,要增加空间
{
int *q=(int *)realloc(S->base,sizeof(int)*(S->size+ADDSIZE));
if(q==NULL)//分配空间不成功
{
return 0;
}
S->base = q;
}
*(S->top)=elem;
S->top += 1;
return 0;
}
int POP(SqStack *S,int *elem)
{
if(S->base==NULL)
{
return -1;
}
if(S->top - S->base == 0)
{
return -1;//空栈
}
S->top -= 1;
*elem=*(S->top);
return 0;
}
int Clear(SqStack *S)
{
if(S->base==NULL)
{
return -1;
}
S->top=S->base;
return 0;
}
int Destory(SqStack *S)
{
if(S->base==NULL)
{
return -1;
}
free(S->base);
S->base=NULL;
S->top=NULL;
S->size=0;
return 0;
}
int StackEmpty(SqStack S)
{
if(S.base == S.top)
{
return 1;
}
return 0;
}
int StackLength(SqStack S)
{
return S.base-S.top;
}
int GetTop(SqStack S,int *elem)
{
*elem=*(S.top-1);
return 0;
}
int Traverse(SqStack S)
{
int l=S.top-S.base;
int *p=S.top-1;
for(int i=0;i<l;i++)
{
printf("%d",*p);
p=p-1;
}
return 0;
}