Leetcode刷题之——队列Queue|先入先出FIFO|广度优先搜索BFS|栈Stack|后入先出LIFO|深度优先搜索DFS

Leetcode刷题之——队列Queue|先入先出FIFO|广度优先搜索BFS|栈Stack|后入先出LIFO|深度优先搜索DFS

  • 1. 队列(Queue)——FIFO,先入先出的数据结构
    • 1.1 循环队列
    • 1.2 内置队列的常用方法(C++)
    • 1.3 广度优先搜索(BFS)
  • 2.栈(Stack)——LIFO, 后入先出的数据结构
    • 2.1 栈的用法(C++)
    • 2.2 深度优先搜索(DFS)

1. 队列(Queue)——FIFO,先入先出的数据结构

队列是一种典型的FIFO数据结构。

FIFO的数据结构中,将首先处理添加到队列中的第一个元素。

入队(Enqueue):队列中,插入(insert)称作入队, 新插入的元素将被添加到队列的末尾。

出队(Dequeue):出队时, 与入队相反,首先被操作的,是第一个元素。

在这里插入图片描述

1.1 循环队列

普通队列就不讲了,一旦一个队列满了,即使在队列前面仍有空间也不能插入下一个元素,这在实际上并不常用。
循环队列就是主要设计出来解决上述问题的。

class MyCircularQueue {
private:vector<int> data;int head;int tail;int size;
public:/** Initialize your data structure here. Set the size of the queue to be k. */MyCircularQueue(int k) {data.resize(k);head = -1;tail = -1;size = k;}/** Insert an element into the circular queue. Return true if the operation is successful. */bool enQueue(int value) {if (isFull()) {return false;}if (isEmpty()) {head = 0;}tail = (tail + 1) % size;data[tail] = value;return true;}/** Delete an element from the circular queue. Return true if the operation is successful. */bool deQueue() {if (isEmpty()) {return false;}if (head == tail) {head = -1;tail = -1;return true;}head = (head + 1) % size;return true;}/** Get the front item from the queue. */int Front() {if (isEmpty()) {return -1;}return data[head];}/** Get the last item from the queue. */int Rear() {if (isEmpty()) {return -1;}return data[tail];}/** Checks whether the circular queue is empty or not. */bool isEmpty() {return head == -1;}/** Checks whether the circular queue is full or not. */bool isFull() {return ((tail + 1) % size) == head;}
};/*** Your MyCircularQueue object will be instantiated and called as such:* MyCircularQueue obj = new MyCircularQueue(k);* bool param_1 = obj.enQueue(value);* bool param_2 = obj.deQueue();* int param_3 = obj.Front();* int param_4 = obj.Rear();* bool param_5 = obj.isEmpty();* bool param_6 = obj.isFull();*/

1.2 内置队列的常用方法(C++)

当你想要按顺序处理元素时,使用队列可能是一个很好的选择。不过大多数流行语言都提供内置的队列库,因此无需自己重新发明轮子。
empty(): 判空 (和stack一样)
pop(): 出 (和stack一样)
push(): 进 (和stack, vector一样)
front(): 获取第一个
back():获取最后一个

1.3 广度优先搜索(BFS)

广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径.
第一轮处理根结点;
第二轮处理根结点旁边的结点;
第三轮处理距根结点两步的结点;
如果在第 k 轮中将结点 X 添加到队列中,则根结点与 X 之间的最短路径的长度恰好是 k
在这里插入图片描述BFS的模板代码(JAVA)
每一轮中,逐个处理已经在队列中的结点,并将所有邻居添加到队列中。新添加的节点不会立即遍历,而是在下一轮中处理。

/*** Return the length of the shortest path between root and target node.*/
int BFS(Node root, Node target) {Queue<Node> queue;  // store all nodes which are waiting to be processedint step = 0;       // number of steps neeeded from root to current node// initializeadd root to queue;// BFSwhile (queue is not empty) {step = step + 1;// iterate the nodes which are already in the queueint size = queue.size();for (int i = 0; i < size; ++i) {Node cur = the first node in queue;return step if cur is target;for (Node next : the neighbors of cur) {add next to queue;}remove the first node from queue;}}return -1;          // there is no path from root to target
}

2.栈(Stack)——LIFO, 后入先出的数据结构

栈是一种典型的LIFO数据结构。

LIFO的数据结构中,将首先处理添加到队列中的第一个元素。

入栈(Push):栈中,插入操作被称为入栈, 新插入的元素将被添加到堆栈的末尾。

出栈(Pop):出栈时, 与入栈相同,首先被操作的,是最后一个元素。

在这里插入图片描述

2.1 栈的用法(C++)

push(): 入栈
pop(): 退栈
empty(): 判空
top(): 获取第一个

2.2 深度优先搜索(DFS)

深度优先搜索(DFS)也可用于查找从根结点到目标结点的路径。与 BFS 不同,更早访问的结点可能不是更靠近根结点的结点。因此,在 DFS 中找到的第一条路径可能不是最短路径
在这里插入图片描述
DFS的模板代码(JAVA)
显式栈实现 DFS:

/** Return true if there is a path from cur to target.*/
boolean DFS(int root, int target) {Set<Node> visited;Stack<Node> s;add root to s;while (s is not empty) {Node cur = the top element in s;return true if cur is target;for (Node next : the neighbors of cur) {if (next is not in visited) {add next to s;add next to visited;}}remove cur from s;}return false;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

袁庭新ES系列16节|Elasticsearch客户端高级操作

前言 上一章节袁老师主要带领大家学习了Elasticsearch客户端基础部分的内容&#xff0c;Elasticsearch客户端还有很多高级相关的操作&#xff0c;这一章节主要带领大家来学习Elasticsearch客户端高级相关的操作。接下来就跟上袁老师的节奏继续探讨Elasticsearch的相关知识。 一…

Linux常用命令总结(四):文件权限及相关命令介绍

1. 文件属性信息解读 1. 文件类型和权限的表示 0首位表示类型。在Linux中第一个字符代表这个文件是目录、文件或链接文件 符号对应文件类型-代表文件dd 代表目录l链接文档(link file)&#xff1b; 1-3位确定属主&#xff08;该文件的所有者&#xff09;拥有该文件的权限。 4-6…

Flutter 之 Widget

在 Flutter 开发框架中&#xff0c;Widget&#xff08;中文&#xff1a;小部件&#xff09;是一种核心概念&#xff0c;用于描述用户界面&#xff08;UI&#xff09;的各个组成部分。它不仅是构成 Flutter 应用程序的基础单元&#xff0c;也是实现应用程序视图层的主要手段。以…

深度探讨容器化技术在网络安全中的应用与挑战

随着容器化技术的快速发展&#xff0c;尤其是Docker与Kubernetes&#xff08;K8s&#xff09;的广泛应用&#xff0c;企业IT架构正经历着从传统虚拟机向轻量级容器的深刻变革。容器化技术为提升资源利用率、加速应用部署及维护提供了强大支持&#xff0c;但同时也给网络安全带来…

每日一题:托普利茨矩阵

给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果矩阵上每一条由左上到右下的对角线上的元素都相同&#xff0c;那么这个矩阵是 托普利茨矩阵 。 示例 1&#xff1a; 输入&#xff1a;matrix…

六西格玛管理培训对于个人的职业发展有哪些帮助?

在职业生涯的辽阔天地中&#xff0c;要想展翅高飞&#xff0c;不仅需要坚实的专业根基&#xff0c;还需掌握那些能引领团队、驱动变革的先进管理理念与方法。六西格玛管理作为一种以数据为基础、追求卓越的管理策略&#xff0c;正逐渐成为企业提升竞争力的有力工具&#xff0c;…

关于msvcp140.dll下载的方法分享,怎么才能靠谱的修复msvcp140.dll

msvcp140.dll文件的缺失&#xff0c;就代表你要去它重新下载回来&#xff0c;不然的话你的某些程序是没办法启动的&#xff0c;会直接卡死报错打不开&#xff01;今天就来教一下大家怎么去把msvcp140.dll下载回来&#xff0c;完成修复&#xff01; 一.msvcp140.dll文件有什么作…

用java实现PDF的下载

1.下载PDF模版 2.导入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.5</version><type>pom</type></dependency> 3.完整代码 package com.by.controller…

Pytorch:神经网络训练过程代码详解

文章目录 一、基本概念1、epoch2、遍历DataLoader 二、神经网络训练过程代码详解步骤一&#xff1a;选择并初始化优化器步骤二&#xff1a;计算损失步骤三&#xff1a;反向传播步骤四&#xff1a;更新模型参数步骤五&#xff1a;清空梯度组合到训练循环中 一、基本概念 for ep…

jQuery 动画小练习

以下是一个使用 jQuery 实现动画效果的简单示例。这个示例会让一个元素在页面加载时向右移动&#xff0c;并在点击时回到原始位置&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

冯唐成事心法笔记 —— 知智慧

系列文章目录 冯唐成事心法笔记 —— 知己 冯唐成事心法笔记 —— 知人 冯唐成事心法笔记 —— 知世 冯唐成事心法笔记 —— 知智慧 文章目录 系列文章目录PART 4 知智慧 知可为&#xff0c;知不可为大势不可为怎么办为什么人是第一位的多谈问题&#xff0c;少谈道理用金字塔…

服用5年份筑基丹 - Vue篇

前言 修仙之道&#xff0c;千回百转&#xff0c;每一步都充满了玄妙与机遇。在这条充满奇幻的修仙之路上&#xff0c;有一物至关重要&#xff0c;那便是筑基丹。此丹&#xff0c;凝聚了修仙者多年的心血与智慧&#xff0c;是修炼道路上的重要助力。 今日&#xff0c;我有幸得…

面试经典150题——路径总和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 注意题目的关键点&#xff1a;判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;起点是root&#xff0c;终点是叶子节点。 那么我们就可以从根节点按照层序遍历的方式&#xff0c;从根节点从根到 叶子不断对路径进行加…

前端H5动态背景登录页面(下)

最近正好有点儿时间&#xff0c;把之前没整理完的前端动态背景登录页面给整理一下&#xff01;这是之前的连接前端H5动态背景登录页面&#xff08;上&#xff09;&#xff0c;这主要是两个登陆页面&#xff0c;一个彩色气泡&#xff0c;一个动态云朵&#xff0c;感兴趣的可以点…

Python程序设计教案

文章目录&#xff1a; 一&#xff1a;软件环境安装 第一个软件&#xff1a;pycharm 第二个软件&#xff1a;thonny 第三个软件&#xff1a;IDIE&#xff08;自带的集成开发环境&#xff09; 二&#xff1a;相关 1.规范 2.关键字 3.Ascll码表 三&#xff1a;语法基础…

linux nginx开机自启

安装位置/usr/local/nginx监听端口80配置文件地址/usr/local/nginx/conf/ 注册服务 cd /usr/lib/systemd/system/vim nginx.service nginx.service 内容 [Unit] DescriptionThe NGINX HTTP and reverse proxy server Aftersyslog.target network.target[Service] Typeforki…

离开A页面时,取消A页面的axios接口数据请求

需求&#xff1a;从A页面跳转至B页面时&#xff0c;要取消A页面的axios请求&#xff1b;有时候&#xff0c;我们可能需要在发送请求后取消它&#xff0c;比如用户在请求还未完成时离开了当前页面或者执行了其他操作&#xff0c;本文将介绍如何在使用 Axios 发送请求时取消这些请…

Apache反向代理的功能和設置

Apache反向代理是Apache HTTP伺服器的一種功能&#xff0c;可以讓伺服器接收客戶端的請求並將其轉發到其他伺服器&#xff0c;然後將這些伺服器的回應返回給客戶端。這樣&#xff0c;客戶端就像直接訪問Apache伺服器一樣&#xff0c;而實際上是在訪問其他的伺服器。 Apache反向…

【Altium Designer 22原理图,PCB】

Altium Designer 22-原理图&#xff0c;PCB ■ AD22■ 工程■ 工程之外的文件 ■ AD22-画原理图■ 原理图库的设计■ 操作心得■ 元件库来源■ 检查原理图库的正确性并生成报告 ■ 原理图的设计■ 原理图页的大小设置■ 设置栅格100mil■ 放置元器件■ 元件的复制&#xff0c;剪…

从 MySQL 到 ClickHouse 实时数据同步 —— Debezium + Kafka 表引擎

目录 一、总体架构 二、安装配置 MySQL 主从复制 三、安装配置 ClickHouse 集群 四、安装 JDK 五、安装配置 Zookeeper 集群 六、安装配置 Kafaka 集群 七、安装配置 Debezium-Connector-MySQL 插件 1. 创建插件目录 2. 解压文件到插件目录 3. 配置 Kafka Connector …