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
    ****************************************************/
  • 相关阅读:
    1.33 (累积互素数)
    1.33 (过滤累积和 求区间内所有素数之和)
    1.32 (更高层次的抽象! 乘法与加法本来就是一回事)
    1.31 (另一种求圆周率的算法)
    1.30 (递归的sum变迭代)
    习题1.29 (积分方法的优化---simpson规则)
    1.3.1 (对过程的抽象)
    SICP习题 1.23(素数查找的去偶数优化)
    SICP习题 1.22(素数)
    pom.xml
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9491395.html
Copyright © 2011-2022 走看看