zoukankan      html  css  js  c++  java
  • 栈的基本操作

    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
    Hint
    建议: 用串的方式(%s)读入操作字符。

    ////利用count来记录栈中元素个数的总和
    #include<iostream>
    #include<stack>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    int main()
    {
        int a,n,t,m,count;
        char x[10];
        scanf("%d",&t);
        while(t--)
        {
            stack<int>s;
            scanf("%d%d",&m,&n);
            getchar();
            count=0;
            while(n--)
            {
                scanf("%s",&x[0]);
                if(x[0]=='A')
                {
                    if(s.empty())
                        printf("E
    ");
                    else
                        printf("%d
    ",s.top());
    
                }
                if(x[0]=='P')
                {
                    scanf("%d",&a);
                    getchar();
                    if(count==m)
                    {
                        printf("F
    ");
                    }
                    else
                    {
                        s.push(a);
                        count++;
                    }
                }
                if(x[0]=='O')
                {
                    if(s.empty())
                        printf("E
    ");
                    else
                    {
                        printf("%d
    ",s.top());
                        s.pop();
                        count--;
                    }
    
                }
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    【原创】编程题练习:反转字符串中的单词
    【最近的学习安排】
    【转载】判断两个链表是否相交、一个链表是否有环
    获取字符串字节长度
    如何找到GridView里的控件,建立GridViewRow对象
    Flex和.NET协同开发利器FluorineFx Flex与.NET互操作
    两款基于Visual Studio开发Flex的插件
    Mysql:向信号量添加给定计数将导致其超出它的最大计数错误
    Sql Server数据库触发器实例
    国外一些知名ASP.Net开源CMS系统
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/8667059.html
Copyright © 2011-2022 走看看