题目引入:
题目描述
小邋遢 MS.Jinlin 是个爱打扮的公主,他有很多晚礼服如 "
LALA
" "NIHAOMA
" "WOBUHAO
" "NIHAOBUHAO
" 等众多衣服,可是由于衣服太多他要把它们装进箱子,但是作为公主,肯定是会突发奇想觉得哪件衣服好看,就把他拿了出来,当然那件衣服上面的衣服也被拿出来了,而且会弄乱了,小邋遢在经过几次的叠衣服和取衣服后,他想知道箱子里最上面的衣服是哪一件,如果箱子为空的话,就告诉她Empty
,如果有多件一样的衣服,肯定是取走最上面的哪一件啦。输入描述
第 1 行,输入N,代表共计进行了几次操作。
第 2 行至第 N+1 行,进行
in
out
操作(in
为 放入衣服,out
为 取出衣服)格式如下:
in name1
out name2
输出描述
输出 N 次操作结束后箱子最上面的衣服名字,若箱子为空,输出
Empty
。输入输出样例
示例 1
输入
6 in AMDYES in INTELNO in USBAD in CNYES out INTELNO in MDICN
输出
MDICN
示例 2
输入
5 in AMDYES in INTELNO in USBAD in CNYES out AMDYES
输出
Empty
用数组模拟栈
import java.util.Scanner;
public class 栈_数组实现 {
final static int maxsize = 100005;
static String[] Mystack = new String[maxsize];//栈
static int Top = 0; //栈顶指针,初始指针不存储元素
//入栈
static boolean in(String name) {
if(Top >= maxsize) {
return false;
}else {
Mystack[++Top] = name;
return true;
}
}
//判断是否为空
static boolean isEmpty() {
if(Top != 0) {
return false;
}else {
return true;
}
}
//出栈
static boolean out() {
if(!isEmpty()) {
Top--;
return true;
}
return false;
}
//求栈顶元素
static String getTop() {
if(isEmpty()) return "";
else return Mystack[Top];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int N;
Scanner in = new Scanner(System.in);
N = in.nextInt();
//输入命令,进行存或取
for (int i = 0; i < N; i++) {
String op, name;
op = in.next();
name = in.next();
if(op.contains("in")) {
in(name);
}else {
while(!getTop().equals(name)) {
out();//取衣服上面的所有衣服
}
out();//取那件衣服
}
}
//输出栈顶元素
if(isEmpty()) {
System.out.println("Empty");
}else {
System.out.println(getTop());
}
}
}
用Java里的内置栈实现
在 Java 的 stack 模板定义了如下操作流程:
push():
执行 push 时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
peek():
执行 peek 时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
pop():
执行 pop 时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
empty():
继承于 Vector,返回是否为空
size():
继承 Vector,返回元素的个数。
import java.util.Scanner;
import java.util.Stack;
public class 自带内置栈 {
static Stack MyStack = new Stack();//声明栈
public static void main(String[] args) {
// TODO Auto-generated method stub
int N;
Scanner in = new Scanner(System.in);
N = in.nextInt();
//输入命令,进行存或取
for (int i = 0; i < N; i++) {
String op, name;
op = in.next();
name = in.next();
if(op.contains("in")) {
MyStack.push(name);
}else {
while(!MyStack.peek().equals(name)) {
MyStack.pop();//取衣服上面的所有衣服
}
MyStack.pop();//取那件衣服
}
}
//输出栈顶元素
if(MyStack.empty()) {
System.out.println("Empty");
}else {
System.out.println(MyStack.peek());
}
}
}
使用内置栈就很方便,不用自己定义入栈、出栈、取栈顶元素等函数,可以直接使用。