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

相关推荐
2301_764441335 分钟前
使用python构建的STAR实验ΛΛ̄自旋关联完整仿真
开发语言·python·算法
共享家95276 分钟前
Java入门( 异常 )
java·开发语言·php
御形封灵8 分钟前
基于canvas的路网编辑交互
开发语言·javascript·交互
xifangge202510 分钟前
Python 爬虫实战:爬取豆瓣电影 Top250 数据并进行可视化分析
开发语言·爬虫·python
SunnyDays101111 分钟前
C# 实战:快速查找并高亮 Word 文档中的文字(普通查找 + 正则表达式)
开发语言·c#
standovon12 分钟前
SQL SERVER 登陆错误:18456
java
大傻^12 分钟前
Spring AI Alibaba 文档智能处理:PDF、Markdown知识入库全链路
java·人工智能·spring·pdf·知识图谱·springai·springaialibaba
kaoshi100app14 分钟前
本周,河南二建报名公布!
开发语言·人工智能·职场和发展·学习方法
421!15 分钟前
ESP32学习笔记之GPIO
开发语言·笔记·单片机·嵌入式硬件·学习·算法·fpga开发
恼书:-(空寄20 分钟前
拦截器获取不到 POST 请求 JSON 结构体参数(完整解决方案)
java·spring boot·spring·servlet