ADT

来源:互联网 发布:spss数据输入教程 编辑:程序博客网 时间:2024/06/03 17:14
#include<iostream>#define     TRUE            1#define     FALSE           0#define     OK              1#define     ERROR           0#define     OVERFLOW        -1#define     INITLENGTH      100#define     INCREASESIZE    10using namespace std;typedef int SElemType;typedef int Status;typedef struct {    SElemType *base;//栈底地址    SElemType *top;//栈顶地址    int stacksize;//栈容量}SqStack;//初始化空栈Status InitStack(SqStack &S){    S.base = (SElemType *)malloc(sizeof(SElemType) * INITLENGTH);    if (!S.base)exit(OVERFLOW);    S.top = S.base;    S.stacksize = INITLENGTH;    return OK;}//清空栈Status ClearStack(SqStack &S){    S.top = S.base;    return OK;}//销毁栈Status DestroyStack(SqStack& S) {    free(S.base);    S.top = S.base = NULL;    S.stacksize = 0;    return OK;}//栈扩容void IncStackSize(SqStack &S) {    S.base = (SElemType *)realloc(S.base, sizeof(SElemType)*(S.stacksize + INCREASESIZE));    S.stacksize += INCREASESIZE;}//压栈Status Push(SqStack &S, char e){    if (S.stacksize == S.top - S.base)        IncStackSize(S);    *(S.top++) = e;    return OK;}//出栈Status Pop(SqStack &S, SElemType &e) {    if (S.top == S.base) return ERROR;    e = *(--S.top);    return OK;}//判栈空Status IsEmpty(SqStack &S) {    return S.top == S.base ? TRUE : FALSE;}//返回栈深int 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 StackPrint(SqStack &S) {    if (S.top == S.base)return ERROR;    SElemType *curPtr;    curPtr = S.base;    while(curPtr < S.top) {        if (curPtr == S.base)cout << *(curPtr);        else cout << ' ' << *(curPtr);        curPtr++;    }    cout << endl;    return OK;}