栈和队列定义及常用语法 LeetCode

一.栈 Stack

1.1 概念

  • 栈是一种线性数据结构,遵循先进后出 FILO(First In Last Out)
  • 只能在一端(栈顶)进行插入、删除

1.2 常用用法

常用操作:

  • 入栈:stack.push()
  • 出栈:stack.pop()
  • 查看栈顶元素:stack.peek()
  • 判空:stack.isEmpty()

注意:空栈的话pop/peek会抛异常,使用前isEmpty()

LinkedList实现栈

复制代码
Deque<Integer> stack = new LinkedList<>();
stack.push(10);  // 压入元素
stack.pop();     // 弹出元素

适用场景:适用于对栈操作的基本需求,支持在栈顶进行插入和删除

ArrayDeque实现栈(常用)

复制代码
ArrayDeque<Integer> stack = new ArrayDeque<>();
stack.push(10);  // 压入元素
stack.pop();     // 弹出元素

适用场景:相比较LinkedList,ArrayDeque的性能通常更优,适用于频繁操作栈顶的场景

二.队列 Queue

1.1 概念

  • 队列是一种线性数据结构,遵循先进先出 FIFO(First In First Out)
  • 在两端操作:队尾入队,队头出队

1.2 常用用法

常用用法:

  • 入队:queue.offer()
  • 出队:queue.poll() 空队列返回null
  • 查看队头元素:queue.peek() 空队列返回null
  • 判空:queue.isEmpty()

LinkedList实现队列:

复制代码
Queue<Integer> queue = new LinkedList<>();
queue.offer(10);  // 入队
queue.poll();     // 出队

适用场景:适合队列操作,可以灵活的进行队列的头尾插入和删除

ArrayDeque实现队列

复制代码
ArrayDeque<Integer> queue = new ArrayDeque<>();
queue.offer(10);  // 入队
queue.poll();     // 出队

适用场景:ArrayDeque性能更好,适合需要高效入队和出队的场景

三.双端队列

Deque是双端队列(Double-ended Queue)的简称,支持从两端插入和删除元素。Deque既可以作为栈使用,也可以作为队列使用。

LinkedList实现双端队列:

复制代码
Deque<Integer> deque = new LinkedList<>();
deque.addFirst(10);  // 在头部插入元素
deque.addLast(20);   // 在尾部插入元素
deque.removeFirst(); // 从头部移除元素
deque.removeLast();  // 从尾部移除元素

使用场景:需要从两端进行插入和删除操作时使用,如实现双向队列、回退栈等

ArrayDeque实现双端队列

复制代码
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.addFirst(10);  // 在头部插入元素
deque.addLast(20);   // 在尾部插入元素
deque.removeFirst(); // 从头部移除元素
deque.removeLast();  // 从尾部移除元素

适用场景:适用需要从两端快速插入和删除元素的场景,性能更好,适用于高效的双端队列操作

代码随想录LeetCode题目:

1.删除字符串中的所有相邻重复项

1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)

2.逆波兰表达式求值

逆波兰表达式,也就是后续表达式(经典)

  • 如果遇到操作数,则将操作数入栈;
  • 如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈;
  • 遍历完成后,栈内只有一个元素,该元素即为逆波兰表达式的值。

150. 逆波兰表达式求值 - 力扣(LeetCode)

3.有效括号匹配 经典

20. 有效的括号 | 代码随想录

相关推荐
青柠之夏cc18 分钟前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 11125 分钟前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
risc12345629 分钟前
什么是码点?
java
OKkankan31 分钟前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
geovindu38 分钟前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
福大大架构师每日一题1 小时前
Rust 1.99.0发布:C 可变参数、裸函数、Cargo 配置、Rustdoc 性能与大量兼容性调整全解析
c语言·开发语言·rust
JavaPub-rodert1 小时前
公共 Docker 镜像源总失效?用 Harbor Proxy Cache 自建 Docker Hub 镜像缓存
java·缓存·docker
智鸟科技GemeOpen开发者智能设备1 小时前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居
自强的小白1 小时前
nacos配置中心面试题(导入配置的优先级),注意是如果后导入相同配置是以 后导入优先。外部入优先和nacos的数据隔离。
java·微服务
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: Feign 的自定义配置与日志级别
java·开发语言·spring cloud