数据结构——栈
一.预定义常量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
二.栈的结构定义
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
三.栈的基本操作
Status InitStack(SqStack &S)
{
S.base=(SElemType*)malloc ((STACK_INIT_SIZE)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack S)
{
return S.top==S.base;
}
SElemType StackLength(SqStack S)
{
return S.top-S.base;
}
Status GetTop(SqStack S, SElemType &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base==S.stacksize)
{
S.base=(SElemType*)realloc(S.base, (S.stacksize+ STACKINCREMENT) *sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
Status StackTraverse(SqStack S,Status (*visit)(SElemType))
{
SElemType *p;
for(p=S.base;p<S.top;p++)
{
if(!visit(*p))
return ERROR;
}
return OK;
}
Status print(SElemType e){
printf("%d",e);
return OK;
}
Status ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}
Status DestroyStack(SqStack &S)
{
if(S.base)
free(S.base);
S.base=NULL;
return OK;
}