浙大版《数据结构学习与实验指导(第2版)》-进阶实验8-2.2 特殊堆栈-What are you Nong Sha Li?

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浙大版《数据结构学习与实验指导(第2版)》-进阶实验8-2.2 特殊堆栈-What are you Nong Sha Li?相关的知识,希望对你有一定的参考价值。


What are you Nong Sha Li?

特殊堆栈

时间限制:0.4秒
空间限制:64M


题目描述

堆栈是一种经典的后进先出的线性结构,通常有入栈(Push)和出栈(Pop)两个操作。

某人觉得这样不够好玩,就自己模拟了一个栈,并加上了取中值(GetMedia)操作。

即,返回(不取出)栈中所有元素的最中间那个元素。若最中间的元素有两个,则返回更靠前的那个。


输入描述

输入包括很多行( 行 数 ≤ 1 0 5 行数\\leq10^5 105),每行都是一个操作。

  1. 如果操作命令是Push,则后面会紧跟一个空格和数字 t ( 0 ≤ t ≤ 1 0 5 ) t(0\\leq t\\leq 10^5) t(0t105),表示要把 t t t入栈。如:Push 3

  2. 如果操作命令是Pop,则此行它后面什么都不会出现,表示要出栈一个元素。

  3. 如果操作命令是GetMedia,则此行它后面什么都不会出现,表示要返回栈中最中间的那个数。

数据保证每个操作命令不包含空格,即不会出现操作Get Media等。


输出描述

符合上述3种描述的输入都是合法输入,但不一定是合法操作。例如在栈空时尝试Pop命令就是非法的。

  1. 如果是Push命令,就把它后面的整数入栈。

  2. 如果是Pop命令,就出栈一个元素并输出

  3. 如果是GetMedia命令,就输出中间的元素。

操作过程中若出现任何非法情况,则这个操作取消并输出What are you Nong Sha Li?


样例一

输入

Pop
Push 1
GetMedia
Push 2
GetMedia
Push 3
GetMedia
Pop

输出

What are you Nong Sha Li?
1
1
2
3

题目分析

1 0 5 10^5 105的数组就可以模拟。

用变量index记录数组中有多少个元素(初始值是 0 0 0),Push就存入数组并且index+1Pop就返回最后一个元素并且index-1GetMedia就返回中间的元素(index-1)/2向下取整

PopGetMedia时若数组为空则是非法。

注意事项

  • GetMedia的时候若栈为空也是非法

  • 题目说操作命令不包含空格(不会出现Get Media),但是没说不会出现其他命令(比如Clear)。如果出现了描述的3种操以外的操作也应被认为是非法。


AC代码

#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
int a[100010];
int main()
{
    int index=0;
    string s;
    while(cin>>s)
    {
        if(s=="Pop")
        {
            if(index<=0)
            {
                puts("What are you Nong Sha Li?");
            }
            else
            {
                printf("%d\\n",a[--index]);
            }
        }
        else if(s=="GetMedia")
        {
            if(index<=0)
            {
                puts("What are you Nong Sha Li?");
            }
            else
            {
                printf("%d\\n",a[(index-1)/2]);
            }
        }
        else if(s=="Push")
        {
            int n;
            cin>>n;
            a[index++]=n;
        }
        else
        {
            puts("What are you Nong Sha Li?");
        }
    }
    return 0;
}

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/119854214

以上是关于浙大版《数据结构学习与实验指导(第2版)》-进阶实验8-2.2 特殊堆栈-What are you Nong Sha Li?的主要内容,如果未能解决你的问题,请参考以下文章

快速排序-浙大版《数据结构学习与实验指导(第2版)》-基础实验7-2.3:德才论

[PTA] PTA题目集导航

数据库系统概论第5版习题解析与实验指导答案王珊张俊

计算机操作系统实验指导 (第3版) 第四篇 操作系统学习指导和习题解析 第19章:调度与死锁 习题和答案

计算机操作系统实验指导 (第3版) 第四篇 操作系统学习指导和习题解析 第17章:进程与线程 习题和答案

习题3.8 符号配对(20 分) 浙大版《数据结构(第2版)》题目集