zoukankan      html  css  js  c++  java
  • SDUT 3335 数据结构实验之栈与队列八:栈的基本操作

     

    数据结构实验之栈与队列八:栈的基本操作

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。

    Input

    首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入。
     对于每组测试数据,第一行输入两个正整数 m(1 <= m <= 100)、n(1 <= n <= 1000),其中m代表当前栈的最大长度,n代表本组测试下面要输入的操作数。 而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示栈顶元素出栈;如果是'A',表示询问当前栈顶的值'。

    Output

     对于每组测试数据,根据其中的命令字符来处理堆栈;
    (1)对所有的'P'操作,如果栈满输出'F',否则完成压栈操作;
    (2)对所有的'A'操作,如果栈空,则输出'E',否则输出当时栈顶的值;
    (3)对所有的'O'操作,如果栈空,则输出'E',否则输出栈顶元素的值,并让其出栈;
    每个输出占据一行,每组测试数据(最后一组除外)完成后,输出一个空行。

    Sample Input

    2
    5 10
    A
    P 9
    A
    P 6
    P 3
    P 10
    P 8
    A
    P 2
    O
    2 5
    P 1
    P 3
    O
    P 5
    A

    Sample Output

    E
    9
    8
    F
    8
    
    3
    5

    提示:本题考查字符串输入问题,要注意getchar,主要就是按照要求一步一步来就可以解决了。

    代码实现如下(g++):
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
        stack<int>s;
        int t;
        int m,n,i;
        char ch;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d",&m,&n);
            for(i=0; i<n; i++)
            {
                getchar();
                scanf("%c",&ch);
                if(ch=='P')
                {
                    int key;
                    scanf("%d",&key);
                    int z = s.size();
                    if(z>=m)
                    {
                        printf("F
    ");
                    }
                    else
                        s.push(key);
                }
                else if(ch=='A')
                {
                    if(s.empty())
                    {
                        printf("E
    ");
                    }
                    else
                        printf("%d
    ",s.top());
                }
                else if(ch=='O')
                {
                    if(s.empty())
                    {
                        printf("E
    ");
                    }
                    else
                    {
                        printf("%d
    ",s.top());
                        s.pop();
                    }
                }
            }
            while(!s.empty())
                s.pop();
            if(t!=0)
                cout<<endl;
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 192KB
    ****************************************************/
  • 相关阅读:
    Tweet信息搜集工具tinfoleak
    Visual Studio 2017为Android APK包签名
    Arduino可穿戴教程之第一个程序——上传运行程序(四)
    基于NMAP日志文件的暴力破解工具BruteSpray
    CSS3边框圆角知识
    渐变的几个效果图
    错误类型
    prompt() 方法
    jQuery 遍历
    jquery的商品首页
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9491395.html
Copyright © 2011-2022 走看看