关于栈的一些基本操作

#include<iostream>
using namespace std;

#define Maxsize 100

typedef struct SqStack{
    int *base;//栈底指针
    int *top; //栈顶指针
}SqStack;

//初始化栈
bool initStack(SqStack &S)
{
    //为顺序栈分配一个最大容量为Maxsize的空间,使栈底指针指向空间的基地址
    S.base = new int[Maxsize];
    //分配空间失败,返回-1
    if (!S.base) return -1;
    //top初始为base,代表空栈
    S.top = S.base;
    return true;
}

//入栈操作
bool pushStack(SqStack &S,int e)
{5
    //栈满
    if (S.base - S.top >= Maxsize) return false;
    *(S.top++) == e;
    return true;
}

//出栈操作
bool popStack(SqStack &S,int &e)
{
    //栈空,不弹栈
    if (S.base == S.top) return false;
    //先将栈顶指针减一,再将栈顶元素赋值给e
    e = *(--S.top);
    return true;
}

//取栈顶元素
int getTop(SqStack S)
{
    //栈不空
    if (S.top != S.base) return *(S.top - 1);
    else return -1;
}

int main()
{
    int n,x;
    SqStack S;
    initStack(S);
    cin >> n;
    //入栈
    while (n--)
    {
        cin >> x;
        pushStack(S,x);
    }
    //出栈
    while (S.top != S.base)
    {
        //输出栈顶元素,然后栈顶元素出栈
        cout << getTop(S) << " ";
        popStack(S,x);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/smallrain6/article/details/106204629