6022: 学习系列——栈 I——模拟栈
Description
栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取。
栈 是仅限在 表尾 进行 插入 和 删除 的 线性表。栈 又被称为 后进先出 (Last In First Out) 的线性表,简称 LIFO 。
栈 是一个线性表,我们把允许 插入 和 删除 的一端称为 栈顶。
【入栈】
栈的插入操作,叫做 入栈,也可称为 进栈、压栈。如下图所示,代表了三次入栈操作:
这就是栈的概念图。现在存储在栈中的只有数据Blue。
然后,栈中添加了数据Green。
接下来,数据 Red 入栈。
【出栈】
栈的删除操作,叫做 出栈,也可称为 弹栈。如下图所示,代表了两次出栈操作:
从栈中取出数据时,是从最上面,也就是最新的数据开始取出的。这里取出的是Red。
如果再进行一次出栈操作,取出的就是Green了。
【总结】
像栈这种最后添加的数据最先被取出,即“后进先出”的结构,我们称为 Last In First Out,简称 LIFO。
【问题】
实现一个栈,栈初始为空,支持四种操作:
- push x – 向栈顶插入一个数 xx;
- pop – 从栈顶弹出一个数;
- empty – 判断栈是否为空;
- top – 查询栈顶元素。
现在要对栈进行 MM 个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。
Input
第一行包含整数 MM,表示操作次数。
接下来 MM 行,每行包含一个操作命令,操作命令为 push x,pop,empty,top 中的一种。
Output
对于每个 empty 和 top 操作都要输出一个查询结果,每个结果占一行。
其中,empty 操作的查询结果为 YES 或 NO,top 操作的查询结果为一个整数,表示栈顶元素的值。
Constraints
$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