• PTA:7-1 栈的基本操作


    题目

    给定一个初始为空的栈(栈容量为10)和一系列进栈、出栈操作,请编写程序输出经过这些操作后栈的元素。栈的元素值均为整数。

    输入格式

    输入第1行为1个正整数n,表示操作个数;

    第2行为给出的n个整数,非0元素表示进栈,此非0元素即为进栈元素,0元素表示出栈。

    保证栈中元素个数不超过10个。

    输出格式

    第一行按出栈顺序输出所有出栈元素,以一个空格隔开;如果栈满时做进栈操作会输出"FULL”,如果栈空时做出栈操作会输出"EMPTY";

    第二行中输出栈中所有元素,以一个空格隔开。

    末尾均有一个空格。

    输入样例

    12
    3 1 2 0 0 -1 0 0 0 4 5 0

    输出样例

    2 1 -1 3 EMPTY 5
    4

    思路

    用C++的STL中的stack来模拟栈
    以下是代码思路和一些要注意的问题🎈

    首先要输入操作的次数n

    使用一个stack来模拟栈的操作:
    遍历操作序列:
    如果操作不为0,就进行进栈操作 - > 如果栈已满,则输出"FULL"
    如果操作为0,出栈操作,如果栈为空,则输出"EMPTY"

    在遍历过程中,已经按出栈的顺序输出了元素或"FULL"/“EMPTY”。
    **最后,**只需要用vector将栈中的剩余元素取出并反转,然后输出就ok了

    一些需要注意的问题:

    1. 要合理地处理了栈满和栈空的情况,输出了"FULL"和"EMPTY"。

    2. 注意!!!
      输出的第二行,题目说的不明确,给的测试样例也不明确。
      实际上要求把栈里剩下的元素from 栈底 to 栈顶 输出
      -->
      可以用一个vector来暂存并反转输出

    代码

    #include
    #include
    #include
    #include
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        stack<int> st;
        int tmp = 0;
        for(int i = 0;i<n;++i)
        {
            cin>>tmp;
            if(tmp != 0)
            {
                if(st.size()== 10)//保证栈中元素个数不超过10个
                {
                    cout<<"FULL ";
                    continue;//栈满了就继续,不可再push进栈了
                }
                st.push(tmp);
            }
            else
            {
                if(!st.empty())//判断是否为空
                {
                    cout<<st.top()<<" ";
                    st.pop();
                }
                else
                    cout<<"EMPTY ";
            }
        }
        
        cout<<endl;//要求输出分两行
        
    //栈里剩余的元素从栈底到栈顶输出 -> 用vector来暂存并反转输出
        vector<int> v;
        while(!st.empty())
        {
            v.push_back(st.top());
            st.pop();
        }
        reverse(v.begin(),v.end());//需要包含算法的头文件
        for(auto c:v)
        {
            cout<<c<<" ";
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    如何更改eclipse的JDK版本
    【imessage苹果群发位置推相册推】CloudKit API或通过作为程序一部分提供的CloudKit仪表板
    ABP.Next系列02 项目下载 运行 -Fstyle
    深入了解JVM和垃圾回收算法
    Python使用MySQL,无记录则插入,有记录则更新 - ON DUPLICATE KEY UPDATE
    mysql图片存取初探
    【GDAL-java的四个常用代码示例】
    layui几种加载方式
    python开发工具PyCharm使用教程:安装
    ES 日期格式处理
  • 原文地址:https://blog.csdn.net/m0_74195626/article/details/133846682