顺序栈的C++实现

仅供参考

#include <iostream>
using namespace std;

// 函数结果状态代码
#define TRUE    1
#define FALSE   0
#define OK      1
#define ERROR   0
#define INFEASIBLE -1
#define OVERFLOW   -2
#define MAXSIZE    100

// Status 是函数的类型 其值是函数结果状态代码
typedef int Status;
typedef int SElemType;
//栈数据结构
typedef struct Stack
{
    SElemType *base;    //栈底指针 不变
    SElemType *top;     //栈顶指针 一直在栈顶元素上一个位置
    int stacksize;      //栈可用的最大容量
}SqStack;

// 初始化操作
Status InitStack(SqStack &S);

// 销毁栈
Status DestroyStack(SqStack &S);

// 判断S是否为空栈
Status StackEmpty(SqStack &S);

// 求栈的长度
Status StackLength(SqStack &S);

// 取栈顶元素
Status GetTop(SqStack &S, SElemType &e);

// 栈置空操作
Status ClearStack(SqStack &S);

// 入栈操作
Status Push(SqStack &S, SElemType e);

// 出栈操作
Status Pop(SqStack &S, SElemType &e);



int main() {

    // 初始化操作
    SqStack S;
    SElemType e = 0;
    InitStack(S);

    // 入栈操作
    e = 11;
    Push(S, e);
    e = 22;
    Push(S, e);
    e = 33;
    Push(S, e);

    // 判断S是否为空栈
    Status ret = StackEmpty(S);
    if (ret == TRUE){
        cout << "空栈" << endl;
    } else{
        cout << "非空栈" << endl;
    }

    // 求栈的长度
    int length = StackLength(S);
    cout << "栈的长度: " << length << endl;

    // 取栈顶元素
    GetTop(S, e);
    cout << "栈顶元素: " << e << endl;

    // 出栈操作
    Pop(S, e);
    cout << "出栈元素: " << e << endl;

    // 栈置空操作
    ClearStack(S);
    // 判断S是否为空栈
    ret = StackEmpty(S);
    if (ret == TRUE){
        cout << "空栈" << endl;
    } else{
        cout << "非空栈" << endl;
    }
    // 销毁栈
    DestroyStack(S);

    return 0;
}


// 初始化操作
Status InitStack(SqStack &S){

    S.base = new SElemType[MAXSIZE];
    if (!S.base) exit(OVERFLOW);        // 储存分配失败
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}

// 销毁栈
Status DestroyStack(SqStack &S){
    if (S.base){
        delete S.base;
        S.stacksize = 0;
        S.base = S.top = nullptr;
    }
    return OK;
}

// 判断S是否为空栈
Status StackEmpty(SqStack &S){

    if (S.base == S.top) return TRUE;
    else return FALSE;
}

// 求栈的长度
int StackLength(SqStack &S){
    return (int)(S.top-S.base);
}

// 取栈顶元素
Status GetTop(SqStack &S, SElemType &e){
    S.top--;
    e = *S.top;
    return OK;
}

// 栈置空操作
Status ClearStack(SqStack &S){
    if (S.top) S.top = S.base;
    return OK;
}

// 入栈操作
Status Push(SqStack &S, SElemType e){
    if (S.top - S.base == S.stacksize) return ERROR;  // 满栈
    *S.top++ = e;
    return OK;
}

// 出栈操作
Status Pop(SqStack &S, SElemType &e){

    if (S.top == S.base) return INFEASIBLE;  // 下溢
    e = *S.top--;
    return OK;
}

测试:

非空栈
栈的长度: 3
栈顶元素: 33
出栈元素: 33
空栈

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值