对栈的基本操作(顺序栈)
1、栈的定义
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#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 Status;
typedef int SElemType
typedef struct SqStack
{
SElemType *top;
SElemType *base;
int stacksize;
}SqStack;
2、栈的创建
Status CreateStack(Stack &S)
{
S.base = (SElemType*) malloc (sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
3、栈的清空
Status ClearStack(SqStack &S)
{
S.top = S.base;
return OK;
}
4、栈的销毁
Status DestroyStack(SqStack &S)
{
int len = S.stacksize;
int i;
for(i = 0; i < len; i++)
{
free(S.base);
S.base++;
}
S.top = S.base = NULL;
S.stacksize = 0;
return OK;
}
5、入栈(压栈)
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;
}
6、出栈
Status Pop(SqStack &S, SElemType &e)
{
if(S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
7、读取栈顶元素
Status GetTop(SqStack S, SElemType &e)
{
if(S.top == S.base) return ERROR;
e = *(S.top - 1);
return OK;
}
8、求栈的长度
int StackLength(SqStack S)
{
return (S.top - S.base);
}