c++ day6

#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
//定义栈
void mume();
int confirm_int();
int confirm_float();
int confirm_double();
int confirm_char();
int confirm_string();
template<typename T>
class Node
{
    T *ptr;
    int top = -1;
    int size ;
public:
    //
    Node()
    {

    }
    //size 是栈的大小
    Node(int a):size(a)
    {
       ptr = new T[size];
       memset(ptr,0,sizeof(T)*size);
    }
    ~Node()
    {
        delete []ptr;
        ptr = nullptr;
    }
    //入栈
    void stacked(T d)
    {
        if(top == size-1)
        {
            throw -1;
        }
        ++top;
        *(ptr + top) = d;
    }
    //出栈
    void outstack()
    {
        if(-1 == top)
        {
            throw -2;
        }
        top--;
    }
    //查看栈顶和栈大小
    void show()
    {
        cout<<"size = "<<size<<endl;
        cout<<"top = "<<top<<endl;
        for(int i = 0; i <= top ;i++)
        {
            cout<<*(ptr+i)<<endl;
        }
    }
    void change(T d)
    {
        *(ptr + top) = d;
    }
};
int main()
{
    mume();

    return 0;
}
void mume()
{
    int a = 0;
    while(1)
    {
        system("cls");
        cout<<"01:int"<<endl;
        cout<<"02:float"<<endl;
        cout<<"03:char"<<endl;
        cout<<"04:double"<<endl;
        cout<<"05:string"<<endl;
        cout<<"请输入栈的类型"<<endl;
        cin>>a;
        switch(a)
        {
            case 1:
            {
                //在int内使用栈
                confirm_int();
                break;
            }
            case 2:
            {
                confirm_float();
                break;
            }
            case 3:
            {
                confirm_char();
                break;
            }
            case 4:
            {
                confirm_double();
                break;
            }
            case 5:
            {
                confirm_string();
                break;
            }
            default:
            {
            cout<<"输入错误,请重新输入"<<endl;
                continue;
            }
        }
        getchar();
        cout<<"请输入enter键";
        getchar();
    }
}
int confirm_int()
{
    int s = 0,a = 0;
    cout<<"请输入栈的大小"<<endl;
    cin>>s;
    int num = 0;
    //申请栈空间
    Node<int>str(s);

    while(1)
    {
        system("cls");
        cout<<"int类型栈"<<endl;
        cout<<"01:入栈"<<endl;
        cout<<"02:出栈"<<endl;
        cout<<"03:遍历栈"<<endl;
        cout<<"04:修改栈顶元素"<<endl;
        cout<<"05:销毁栈"<<endl;
        cout<<"请输入进行的操作"<<endl;
        cin>>a;
        switch(a)
        {
            case 1:
            {
                 cout<<"请输入入栈的值"<<endl;
                 cin>>num;
                 try
                 {
                     str.stacked(num);
                 }
                 catch(int b)
                 {
                     cout<<"栈满"<<endl;
                 }

                 break;
            }
            case 2:
            {
            try
            {
                str.outstack();
            }
            catch(int b)
            {
               cout<<"栈已空"<<endl;
            }
                break;
            }
            case 3:
            {
                str.show();
                break;
            }
            case 4:
            {
                cout<<"请输入修改后栈顶的值"<<endl;
                cin>>num;
                try
                {
                    str.stacked(num);
                }
                catch(int b)
                {
                    cout<<"栈满"<<endl;
                }
                break;
            }
            case 5:
            {
                return -1;
            }
            default:
            {
                continue;
            }
        }
        getchar();
        cout<<"请输入enter键";
        getchar();
    }
    return 0;
}
int confirm_float()
{
    int s = 0,a = 0;
    cout<<"请输入栈的大小"<<endl;
    cin>>s;
    float num = 0;
    //申请栈空间
    Node<float>str(s);

    while(1)
    {
        system("cls");
        cout<<"float类型栈"<<endl;
        cout<<"01:入栈"<<endl;
        cout<<"02:出栈"<<endl;
        cout<<"03:遍历栈"<<endl;
        cout<<"04:修改栈顶元素"<<endl;
        cout<<"05:销毁栈"<<endl;
        cout<<"请输入进行的操作"<<endl;
        cin>>a;
        switch(a)
        {
            case 1:
            {
                 cout<<"请输入入栈的值"<<endl;
                 cin>>num;
                 try
                 {
                     str.stacked(num);
                 }
                 catch(int b)
                 {
                     cout<<"栈满"<<endl;
                 }
                 break;
            }
            case 2:
            {
            try
            {
                str.outstack();
            }
            catch(int b)
            {
               cout<<"栈已空"<<endl;
            }
                break;
            }
            case 3:
            {
                str.show();
                break;
            }
            case 4:
            {
                cout<<"请输入修改后栈顶的值"<<endl;
                cin>>num;
                str.change(num);
                break;
            }
            case 5:
            {
                return -1;
            }
            default:
            {
                continue;
            }
        }
        getchar();
        cout<<"请输入enter键";
        getchar();
    }
    return 0;
}
int confirm_char()
{
    int s = 0,a = 0;
    cout<<"请输入栈的大小"<<endl;
    cin>>s;
    char num = 0;
    //申请栈空间
    Node<char>str(s);

    while(1)
    {
        system("cls");
        cout<<"char类型栈"<<endl;
        cout<<"01:入栈"<<endl;
        cout<<"02:出栈"<<endl;
        cout<<"03:遍历栈"<<endl;
        cout<<"04:修改栈顶元素"<<endl;
        cout<<"05:销毁栈"<<endl;
        cout<<"请输入进行的操作"<<endl;
        cin>>a;
        switch(a)
        {
            case 1:
            {
                 cout<<"请输入入栈的值"<<endl;
                 cin>>num;
                 try
                 {
                     str.stacked(num);
                 }
                 catch(int b)
                 {
                     cout<<"栈满"<<endl;
                 }
                 break;
            }
            case 2:
            {
            try
            {
                str.outstack();
            }
            catch(int b)
            {
               cout<<"栈已空"<<endl;
            }
                break;
            }
            case 3:
            {
                str.show();
                break;
            }
            case 4:
            {
                cout<<"请输入修改后栈顶的值"<<endl;
                cin>>num;
                str.change(num);
                break;
            }
            case 5:
            {
                return -1;
            }
            default:
            {
                continue;
            }
        }
        getchar();
        cout<<"请输入enter键";
        getchar();
    }
    return 0;
}
int confirm_double()
{
    int s = 0;
    int a = 0;
    cout<<"请输入栈的大小"<<endl;
    cin>>s;
    double num = 0;
    //申请栈空间
    Node<double>str(s);

    while(1)
    {
        system("cls");
        cout<<"double类型栈"<<endl;
        cout<<"01:入栈"<<endl;
        cout<<"02:出栈"<<endl;
        cout<<"03:遍历栈"<<endl;
        cout<<"04:修改栈顶元素"<<endl;
        cout<<"05:销毁栈"<<endl;
        cout<<"请输入进行的操作"<<endl;
        cin>>a;
        switch(a)
        {
            case 1:
            {
                 cout<<"请输入入栈的值"<<endl;
                 cin>>num;
                 try
                 {
                     str.stacked(num);
                 }
                 catch(int b)
                 {
                     cout<<"栈满"<<endl;
                 }
                 break;
            }
            case 2:
            {
            try
            {
                str.outstack();
            }
            catch(int b)
            {
               cout<<"栈已空"<<endl;
            }

                break;
            }
            case 3:
            {
                str.show();
                break;
            }
            case 4:
            {
                cout<<"请输入修改后栈顶的值"<<endl;
                cin>>num;
                str.change(num);
                break;
            }
            case 5:
            {
                return -1;
            }
            default:
            {
                continue;
            }
        }
        getchar();
        cout<<"请输入enter键";
        getchar();
    }
    return 0;
}
int confirm_string()
{
    int s = 0,a = 0;
    cout<<"请输入栈的大小"<<endl;
    cin>>s;
    string num = "";
    //申请栈空间
    Node<string>str(s);

    while(1)
    {
        system("cls");
        cout<<"string类型栈"<<endl;
        cout<<"01:入栈"<<endl;
        cout<<"02:出栈"<<endl;
        cout<<"03:遍历栈"<<endl;
        cout<<"04:修改栈顶元素"<<endl;
        cout<<"05:销毁栈"<<endl;
        cout<<"请输入进行的操作"<<endl;
        cin>>a;
        switch(a)
        {
            case 1:
            {
                 num = "";
                 cout<<"请输入入栈的值"<<endl;
                 cin>>num;
                 cout<<num<<endl;
                 try
                 {
                     str.stacked(num);
                 }
                 catch(int b)
                 {
                     cout<<"栈满"<<endl;
                 }

                 break;
            }
            case 2:
            {
            try
            {
                str.outstack();
            }
            catch(int b)
            {
               cout<<"栈已空"<<endl;
            }
                break;
            }
            case 3:
            {
                str.show();
                break;
            }
            case 4:
            {
                cout<<"请输入修改后栈顶的值"<<endl;
                cin>>num;
                try
                {
                    str.stacked(num);
                }
                catch(int b)
                {
                    cout<<"栈满"<<endl;
                }
                break;
            }
            case 5:
            {
                return -1;
            }
            default:
            {
                continue;
            }
        }
        getchar();
        cout<<"请输入enter键";
        getchar();
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值