题目描述
小邋遢 MS.Jinlin 是个爱打扮的公主,他有很多晚礼服如 “LALA”“NIHAOMA” “WOBUHAO” “NIHAOBUHAO” 等众多衣服,可是由于衣服太多他要把它们装进箱子,但是作为公主,肯定是会突发奇想觉得哪件衣服好看,就把他拿了出来,当然那件衣服上面的衣服也被拿出来了,而且会弄乱了,小邋遢在经过几次的叠衣服和取衣服后,他想知道箱子里最上面的衣服是哪一件,如果箱子为空的话,就告诉她 Empty ,如果有多件一样的衣服,肯定是取走最上面的哪一件啦。
输入描述
第 1 行,输入N,代表共计进行了几次操作。
第 2 行至第 N+1 行,进行 in out 操作(in 为 放入衣服,out 为 取出衣服)
格式如下:
in name1
out name2
输出描述
输出 N 次操作结束后箱子最上面的衣服名字,若箱子为空,输出 Empty。
输入
6
in AMDYES
in INTELNO
in USBAD
in CNYES
out INTELNO
in MDICN
输出
MDICN
输入
5
in AMDYES
in INTELNO
in USBAD
in CNYES
out AMDYES
输出
Empty
源码实现
public class 小邋遢的衣橱 {
static String[] wardrobe = new String[1000];
static int wh = -1;//栈顶代表最上面的值的下标
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int times = scan.nextInt();
for(int i=0;i<times;i++){
if(scan.next().equals("in")){
in(scan.next());
}else{
out(scan.next());
}
}
scan.close();
if (isEmpty()){
System.out.println("Empty");
}else {
System.out.println(wardrobe[wh]);
}
}
public static void in(String name){
if(wh==999){
System.out.println("满了");
return;
}
wardrobe[++wh] = name;
}
public static void out(String name){
while(!wardrobe[wh].equals(name)){
wh--;//出栈只需要把栈顶指针下移就行了,没必要把栈内元素也清成null
}
wh--;
}
public static boolean isEmpty(){
if (wh==-1){
return true;
}else {
return false;
}
}
}
工具类简化版
利用了Stack()类
push(Object o)
是入栈
pop()
是出栈
peek()
是取栈顶元素
empty()
是判断栈是否为空
public class 小邋遢的衣橱tool {
static Stack wardrobe = new Stack();
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int times = scan.nextInt();
for(int i=0;i<times;i++){
if(scan.next().equals("in")){
wardrobe.push(scan.next());
}else{
String clothes = scan.next();
while(!wardrobe.peek().equals(clothes)){
wardrobe.pop();
}
wardrobe.pop();
}
}
scan.close();
if (wardrobe.empty()){
System.out.println("Empty");
}else {
System.out.println(wardrobe.peek());
}
}
}