顺序栈

#include <iostream>
using namespace std;

#define MAXSIZE 100
struct Stack
{
    int* top;
    int* base;
    int stacksize;
};

//顺序栈的初始化
bool initStack(Stack& s)
{
    s.base = new int[MAXSIZE];   //1.分配一个数组空间给栈底,栈底表示数组的首地址。
    s.top = s.base;   //2.栈顶指向栈底
    s.stacksize = MAXSIZE;   //3.设置顺序栈的大小

    return true;
}

//判断顺序栈是否为空
bool isEmpty(Stack& s)
{
    return s.top == s.base;
}

//获取顺序栈的长度
int getStackLength(Stack& s)
{
    return s.top - s.base;
}

//清空顺序栈
void clearStack(Stack& s)
{
    if (s.base)
        s.top = s.base;
}

//销毁顺序栈
void destroyStack(Stack& s)
{
    if (!s.base)return;

    delete s.base;   //栈底指针相当于数组首地址
    s.stacksize = 0;
    s.top = s.base = nullptr;
}

//顺序栈的入栈
bool push(Stack& s, int value)
{
    if (!s.base)return false;
    if (s.top - s.base == s.stacksize)return false;   //1.判断是否栈满

    *(s.top) = value;   //2.将元素压入栈顶
    s.top++;   //3.栈顶指针加1

    return true;
}

//顺序栈的出栈
bool pop(Stack& s, int& value)
{
    if (s.top == s.base)return false;   //1.判断是否栈空

    s.top--;   //2.栈顶下移
    value = *(s.top);   //3.取值返回

    return true;
}

void main()
{
    //栈不能遍历,只能出栈。

    Stack s;
    initStack(s);

    cout << "顺序栈" << (isEmpty(s) ? "为空" : "不为空") << endl;

    cout << "顺序栈入栈:" << endl;
    for (int i = 0; i < 10; i++)
        push(s, i);

    cout << "顺序栈长度:" << getStackLength(s) << endl;

    int value = 0;
    pop(s, value);
    cout << "顺序栈出栈:" << value << endl;

    clearStack(s);
    cout << "清空顺序栈!" << endl;

    destroyStack(s);
    cout << "销毁顺序栈!" << endl;
}