栈和队列定义及常用语法 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. 有效的括号 | 代码随想录

相关推荐
侠客行031710 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪10 小时前
深入浅出LangChain4J
java·langchain·llm
灰子学技术12 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚12 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎12 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
二十雨辰12 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码13 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚13 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂13 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13613 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript