数据结构基础函数库——顺序栈

#include 
#include 
#include 
#include 

using namespace std;

#define OK           1
#define ERROR        0
#define TRUE         1
#define FALSE        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
    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 DestroyStack(SqStack &S){ //  销毁栈S
    free(S.base);
    return OK;
}

Status ClearStack(SqStack &S){ //  清空栈S
    S.top = S.base;
    return OK;
}

Status StackEmpty(SqStack S){ // 判断栈是否为空
    if(S.top == S.base) return TRUE;
    return FALSE;
}

int StackLength(SqStack S){ //  返回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;
    ++ S.top;
    return OK;
}

Status Pop(SqStack &S, SElemType &e){
    if(S.top == S.base) return ERROR;
    -- S.top;
    e = *(S.top);
    return OK;
}


你可能感兴趣的:(数据结构)