Problem6022--学习系列——栈 I——模拟栈

6022: 学习系列——栈 I——模拟栈

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

Description

栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取。

 是仅限在 表尾 进行 插入 和 删除 的 线性表 又被称为 后进先出 (Last In First Out) 的线性表,简称 LIFO 。

 是一个线性表,我们把允许 插入 和 删除 的一端称为 栈顶


【入栈】

栈的插入操作,叫做 入栈,也可称为 进栈、压栈。如下图所示,代表了三次入栈操作:



这就是栈的概念图。现在存储在栈中的只有数据Blue。

然后,栈中添加了数据Green。

接下来,数据 Red 入栈。
【出栈】
栈的删除操作,叫做 出栈,也可称为 弹栈。如下图所示,代表了两次出栈操作:



从栈中取出数据时,是从最上面,也就是最新的数据开始取出的。这里取出的是Red。

如果再进行一次出栈操作,取出的就是Green了。
【总结】
像栈这种最后添加的数据最先被取出,即“后进先出”的结构,我们称为 Last In First Out,简称 LIFO。



【问题】

实现一个栈,栈初始为空,支持四种操作:

  1. push x – 向栈顶插入一个数 xx
  2. pop – 从栈顶弹出一个数;
  3. empty – 判断栈是否为空;
  4. top – 查询栈顶元素。

现在要对栈进行 MM 个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。

Input

第一行包含整数 MM,表示操作次数。

接下来 MM 行,每行包含一个操作命令,操作命令为 push x,pop,empty,top 中的一种。

Output

对于每个 empty 和 top 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YES 或 NO,top 操作的查询结果为一个整数,表示栈顶元素的值。

Constraints

$1≤M≤100,000$,
$1≤x≤10^9$
所有操作保证合法。

Sample 1 Input

10
push 5
top
push 6
pop
top
pop
empty
push 4
top
empty

Sample 1 Output

5
5
YES
4
NO

Source/Category

数据结构 2.2.栈