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

相关推荐
阿里嘎多学长2 小时前
2026-04-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
abcnull4 小时前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡4 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
juniperhan4 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054734 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路5 小时前
C++23概述
java·c++·c++23
时空系5 小时前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
专注API从业者6 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
CHANG_THE_WORLD6 小时前
python 批量终止进程exe
开发语言·python