#include "stdio.h"
#include "alloc.h"
#include "stdlib.h"
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
#define OVERFLOW -2
typedef int SElemType;//定义元素类型
typedef int Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
SqStack S;
SElemType e;
Status InitStack(SqStack *S)//栈的构造函数
{
(*S).base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!(*S).base)
{
printf("分配地址失败!");
exit(OVERFLOW);
}
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack S,SElemType *e)//用e返回栈顶
{
if(S.top==S.base)
return ERROR;
*e=*(S.top-1);
return OK;
}
Status Push(SqStack *S,SElemType e)//入栈
{
if(!(*S).base)
{
printf("栈不存在");
exit(OVERFLOW);
}
if((*S).top-(*S).base>=((*S).stacksize))
{
(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT *sizeof(SElemType)));
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
Status Pop(SqStack *S,SElemType *e)//出栈
{
if((*S).base==(*S).top)
return ERROR;
*e=*(--(*S).top);
return OK;
}
Status StackEmpty(SqStack S)//判断是否为空栈
{
if(!S.base)
{
printf("栈不存在");
exit(OVERFLOW);
}
if(S.base==S.top)
return TURE;
else
return FALSE;
}
int StackLength(SqStack S)//栈的长度
{
if(!S.base)
{
printf("栈不存在");
exit(OVERFLOW);
}
return S.top-S.base;
}
Status ClearStack(SqStack *S)//将栈置为空栈
{
if(!(*S).base)
{
printf("栈不存在");
exit(OVERFLOW);
}
while((*S).top!=(*S).base)
Pop(&S,&e);
}
Status DestoryStack(SqStack *S)//销毁栈
{
if(!(*S).base)
{
printf("栈不存在");
exit(OVERFLOW);
}
(*S).base=NULL;
free((*S).base);
return OK;
}
欢迎大家指出错误,