• 数据结构之顺序栈(C++版)


    #include <iostream>
    #include <stdlib.h>
    #define MAXLISTSIZE 100 //预设的存储空间最大容量
    using namespace std;
    typedef string ElemType;
    typedef struct{
    ElemType *base; //存储空间基址
    int top; //栈顶指针
    int stacksize; //允许的最大存储空间以元素为单位
    }Stack;

    void InitStack(Stack &S);
    void DestroyStack(Stack &S);
    void Push(Stack &S);
    void Pop(Stack &S);
    void GetTop(Stack S);
    void StackLength(Stack S);
    void StackEmpty(Stack S);

    int main(void)
    {
    Stack S;
    int z;
    cout << "+---------------------------+" << ' ';
    cout << "|----------顺序栈-----------|" << ' ';
    cout << "+---------------------------+" << ' ';
    cout << "提示:为保证您的操作得到保存,请按正常顺序退出系统^_^" << ' ';
    do
    {
    cout << ' ' << ' ' << ' ' << ' ' <<"--------------------------------" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ 主菜单 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+--------------------------------" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [1]----顺序栈初始化操作 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [2]----顺序栈的销毁操作 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [3]----顺序栈的入栈操作 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [4]----顺序栈的出栈操作 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [5]----顺序栈取栈顶元素 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [6]----顺序栈求栈长操作 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [7]----顺序栈的判空操作 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [0]----退出系统 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"-----------------------------------" << ' ';
    cout << "请输入您的选择:";
    cin >> z;
    switch(z)
    {
    case 0 : break;
    case 1 : InitStack(S);break;
    case 2 : DestroyStack(S);break;
    case 3 : Push(S);break;
    case 4 : Pop(S);break;
    case 5 : GetTop(S);break;
    case 6 : StackLength(S);break;
    case 7 : StackEmpty(S);break;
    default:cout << "无效选项!" << ' ';system("pause");
    }
    }
    while(z!= 0);
    }

    void InitStack (Stack &S)
    {
    // 构造一个最大存储容量为 maxsize 的空栈 S
    int maxsize;
    cout << "请输入栈的最大储存容量:";
    cin >> maxsize;
    if (maxsize == 0)
    maxsize = MAXLISTSIZE;
    S.base = new ElemType[maxsize];
    if (!S.base) exit(1); //存储分配失败
    S.stacksize = maxsize;
    S.top = 0; //空栈中元素个数为0
    system("pause");
    }

    void Push(Stack &S)
    {
    ElemType e;
    int j, n;
    if (S.stacksize == 0)
    {
    cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
    system("pause");
    return;
    }
    if (S.top == S.stacksize)
    {
    cout << "栈已满,无法进行插入" << endl;
    system("pause");
    return;
    }
    cout << "请输入压入栈的元素个数(元素个数必须小于或等于" << S.stacksize - S.top << "):";
    cin >> n;
    cout << "请输入压入栈的元素:";
    for(j = 0; j < n; j++)
    {
    cin >> e;
    *(S.base + S.top) = e; // 插入新的元素 
    ++S.top; // 栈顶指针后移 
    }
    system("pause");
    }

    void Pop(Stack &S)
    {
    ElemType e;
    int j, n;
    if (S.stacksize == 0)
    {
    cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
    system("pause");
    return;
    }
    if (S.top == 0)
    {
    cout << "栈为空,无法出栈" << endl;
    system("pause");
    return;
    }
    cout << "请输入出栈的元素个数(出栈元素个数应小于或等于" << S.top << "):";
    cin >> n;
    cout << "出栈的元素为:";
    for(j = 0; j < n; j++)
    {
    e = *(S.base + S.top-1); // 返回非空栈中栈顶元素
    cout << e << ' ';
    --S.top; // 栈顶指针前移
    }
    cout << endl;
    system("pause");
    }

    void GetTop(Stack S)
    {
    ElemType e;
    if (S.stacksize == 0)
    {
    cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
    system("pause");
    return;
    }
    if (S.top == 0)
    {
    cout << "栈为空,无法获取栈顶元素" << endl;
    system("pause");
    return;
    }
    e = *(S.base + S.top-1); // 返回非空栈中栈顶元素
    cout << "栈顶元素为:" << e << endl;
    system("pause");
    }

    void StackEmpty(Stack S)
    {
    if (S.stacksize == 0)
    {
    cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
    system("pause");
    return;
    }
    if(S.top == 0)
    cout << "该顺序栈为空栈" << endl;
    else
    cout << "该顺序栈不为空栈" << endl;
    system("pause");
    }

    void StackLength(Stack S)
    {
    if (S.stacksize == 0)
    {
    cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
    system("pause");
    return;
    }
    // 返回S的元素个数,即栈的长度
    cout << "栈长为:" << S.top << endl;
    system("pause");
    }

    void DestroyStack(Stack &S)
    {
    // 销毁栈S,S不再存在
    if (S.stacksize == 0)
    {
    cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
    system("pause");
    return;
    }
    delete[] S.base;
    S.top = 0;
    S.stacksize = 0;
    cout << "栈已销毁" << endl;
    system("pause");
    }

  • 相关阅读:
    what's the python之异常处理
    what's the python之面向对象(进阶)
    what's the python之面向对象
    what's the python之自定义模块和包
    Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
    Java之JUC系列:外部Tools
    java CS结构软件自动升级的实现
    史上最全最强SpringMVC详细示例实战教程
    搭建最简单的SpringMVC框架(使用maven)
    小心对待query_cache_size
  • 原文地址:https://www.cnblogs.com/wwttsqt/p/7783183.html
Copyright © 2020-2023  润新知