前言
-🏀大家好,我是BXuan,热爱编程与篮球的软件工程大二学生一名
-📚近期在准备4月份的蓝桥省赛,本章与大家一起聊聊有关栈的问题!如文有误,请大家指出并多多包涵。
-🏃放弃不难,但坚持一定很酷。
文章目录
📕知识点
- 栈的实现原理与应用
📕概念
📕存储方式
-
顺序存储
-
链式存储(程序自带)
🔑栈
1、栈的逻辑结构
- 栈:只允许在一端进行插入、删除操作的线性表。
- 空栈:不含任何数据元素的栈。
- 允许插入(也称进栈、压栈、入栈)、删除(也称出栈)的一端称为栈顶。
2、时间复杂度
- isEmpty() 查找操作时间复杂度为 O(1)
- in() 入队操作时间复杂度为 O(1)
- out() 出队操作时间复杂度为 O(1)
真题巩固
🚀真题巩固
一、小邋遢的衣橱(编写类实现)
问题描述
小邋遢 MS.JinlinMS.Jinlin 是个爱打扮的公主,他有很多晚礼服如 “LALA” “NIHAOMA” “WOBUHAO” “NIHAOBUHAO” 等众多衣服,可是由于衣服太多他要把它们装进箱子,但是作为公主,肯定是会突发奇想觉得哪件衣服好看,就把他拿了出来,当然那件衣服上面的衣服也被拿出来了,而且会弄乱了,小邋遢在经过几次的叠衣服和取衣服后,他想知道箱子里最上面的衣服是哪一件,如果箱子为空的话,就告诉她 Empty ,如果有多件一样的衣服,肯定是取走最上面的哪一件啦。
要求:使用自写类实现该题
输入描述
第 1 行,输入N,代表共计进行了几次操作。
第 2 行至第 N+1 行,进行 in out 操作(in 为 放入衣服,out 为 取出衣服)
格式如下:
in name1
out name2
输出描述
输出 N 次操作结束后箱子最上面的衣服名字,若箱子为空,输出 Empty。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
输入输出示例
示例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
代码示例1:
第一份是系统给的答案,但总感觉在定义存放结果的数组那块有点问题。
package E_lanqiao;
import java.util.Scanner;
public class Main {
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()) return false;
else{
Top--;
return true;
}
}
static String getTop()
{
if(isEmpty()) return "";
else return Mystack[Top];
}
public static void <