数据结构期末复习(いち)--顺序栈的定义及使用

#include <iostream>
using namespace std;
#define MAXSIZE 100  //顺序栈存储空间初始分配大小
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef struct //顺序栈结构定义
{
    int *base;  //栈底指针
    int *top;	//栈顶指针
    int stacksize;  //栈可使用的最大容量
} Sqstack;

//初始化,构造一个空栈
int Init_Stack(Sqstack &s)
{
    s.base = new int[MAXSIZE]; //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
    if(!s.base)	exit(-1);  //分配失败则退出
    s.top = s.base;		//top初始为base,表栈空
    s.stacksize = MAXSIZE;
    return 0;
}

//入栈操作
int Push_Stack(Sqstack &s, int e)
{
    if(s.top - s.base == s.stacksize)	//栈满退出
        return 1;
    *s.top++ = e; //将元素e压入栈顶,同时栈顶指针加1
    //等同于*s.top=e;s.top++;
    return 0;
}

//出栈操作
int Pop_Stack(Sqstack &s)
{
    if(s.top == s.base)	return 1; //栈空
    --s.top;	//栈顶指针减1
    return 0;
}

//取栈顶元素
int Get_Top(Sqstack s)
{
    if(s.top != s.base) //栈非空
        return *(s.top - 1); //栈顶指针不变,返回栈顶元素的值
}

//输出栈
void printstack(Sqstack s)
{
    while((s.top != s.base))   //栈非空
    {
        cout << Get_Top(s) << " ";
        Pop_Stack(s);
    }
    cout << endl;
}

int main()
{
    Sqstack s;
    Init_Stack(s);
    for (int i = 0; i < 10; ++i)
    {
        Push_Stack(s, i);
    }
    int a, b;
    cout << "1--print,2--pop,3--push,0--exit\n";
    for(int i = 0; i < 4; ++i)
    {
        cin >> a;
        if (a == 1)
        {
            printstack(s);
        }
        else if (a == 3)
        {
            cout << "元栈为:";
            printstack(s);
            cout << "请输入要插入的数:";
            cin >> b;
            Push_Stack(s, b);
            cout << "插入后栈为:";
            printstack(s);
        }
        else if (a == 2)
        {
            cout << "元栈为:";
            printstack(s);
            //cout<<"请输入要插入的数:";
            //cin>>b;
            Pop_Stack(s);
            cout << "pop后栈为:";
            printstack(s);
        }
        else if (a == 0)
        {
            return 0;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41684261/article/details/80639768