清华大学算法训练营——算法一:栈程序

栈程序

时间限制:2s,空间256MB

问题描述

实现一个栈,完成以下功能:

  1. 入栈
  2. 出栈
  3. 查询栈中位置Y是谁

一开始栈为空,栈中的位置从1开始(即栈底位置为1)。

输入

第一行一个整数n,表示操作个数(1 <= n <= 100000)

接下来n行,每行第一个数字表示操作(见描述):

  • 若为数字1,则接下来有一串字符串X,表示将X压入栈中。
  • 若为数字2,表示弹出栈顶(保证栈非空),并输出出栈的这个人。
  • 若为数字3,则接下来有一个整数Y,表示询问栈中位置Y是谁(保证位置Y合法),并输出名字。

数据中的字符串只包含26个小写字母(无空格灯分隔符),且长度不超过15

字符串可能有重复,正如现实中可能有重名。

输出

将所有操作2和操作3输出,一行一个。

输入样例

11
1 a
1 b
1 c
3 1
3 2
3 3
2
1 d
3 1
3 2
3 3

输出样例

a
b
c
c
a
b
d

测试样例

4
1 sdfasdasgeqsadg
2
1 sdf
3 1

测试样例

sdfasdasgeqsadg
sdf

提示

C++或JAVA所提供的Stack类并未直接提供栈中元素的索引,所以可能需要你自己写一个栈。

#include <bits/stdc++.h>
#define N 100000
using namespace std;
string Stack[N];
int top,n;

void push(string name) {
    Stack[++top] = name;
}

string pop() {
    return Stack[top--];
}
string query(int pos) {
    return Stack[pos];
}

int main() {
    int n;
    scanf("%d", &n);
    char name[20];
    for (; n--; ) {
        int op;
        scanf("%d", &op);
        if (op == 1) {
            scanf("%s", name);
            push(name);
        } else if (op == 2) {
            printf("%s\n", pop().c_str());
        } else {
            int pos;
            scanf("%d", &pos);
            printf("%s\n", query(pos).c_str());
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/81455732