当前位置: 首页 > news >正文

数据结构(队列)

一.什么是队列

1.队列定义

        队列是一种特殊的线性表,特殊之处在于他只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。和栈一样,队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾,进行删除操作的一端称为队头或者队首。

2.队列特点

        ①   队列中的元素满足先进先出(FIFO)的特点,即先进入队列的元素总是最先从队列移出。这种特点使得队列在处理数据时具有优势,能够高效地组织和管理进程。同时,先进先出也保证了队列中元素的顺序稳定,避免了一些特护情况下的数据丢失。

        ② 限制插入和删除操作:队列只允许在队尾插入元素,在队头删除元素。

        ③ 应用广泛:队列在计算机领域中应用广泛,如操作系统、网络通信、数据压缩等,在实际生活中,排队买票、办理业务等也可以用队列来模拟和处理。

二.队列的基本操作 

1.首先定义一个队列接口,编写队列的几种基本操作

public interface myQueue<T> {// 入队void offer(T val);// 出队T poll();// 查看队首元素T getFront();// 获取当前队列中的元素个数int getSize();// 判断队列是否为空boolean isEmpty();}

2.我们创建一个类去实现我们自己撰写的接口

// 以数组为队列的数据存储结构
public class ArrOrdQueue<T> implements myQueue<T> {private MyArray<T> data;int size;public ArrOrdQueue() {this.data = new MyArray<>(100);this.size = 0;}@Overridepublic void offer(T val) {this.data.add(val);this.size++;}@Overridepublic T poll() {if(isEmpty()){return null;}return this.data.removeFromLast();}@Overridepublic T getFront() {if(isEmpty()){return null;}return this.data.getValue();}@Overridepublic int getSize() {return this.data.getSize();}@Overridepublic boolean isEmpty() {return this.data.isEmpty();}}

 3.入队操作

    // 添加元素public void add(T item) {this.arr[this.size] = item;this.size++;}

4. 判断队列是否为空

    // 判空public boolean isEmpty() {return this.size == 0;}

5.出队操作

    public T removeFromLast() {T delVal = this.arr[this.size - 1];this.size--;return delVal;}

6. 查看当前队头元素

    public T getValue() {return getValueByIndex(this.size - 1);}// 获取指定位置的值public T getValueByIndex(int index) {// 入参判断if (index < 0 || index > capacity) {throw new IllegalArgumentException("索引异常!");}return this.arr[index];}

7.获取当前队列中元素的个数

    // 获取元素个数public int getSize() {return this.size;}

 三.队列的应用

        ① 图的遍历算法中的广度优先搜索就可以用队列辅助。

        ② 可用于计算机的模拟。

        ③ 可作为CPU的作业调度。使用队列来处理,可实现先到先执行的要求

        

相关文章:

数据结构(队列)

一.什么是队列 1.队列定义 队列是一种特殊的线性表&#xff0c;特殊之处在于他只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。和栈一样&#xff0c;队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾&#xff0c;进行删除操作的…...

docker容器启动后修改或添加端口 nacos容器 版本2.x需要额外开放9848、9849

1.输入docker ps -a查看需要修改的容器ID: 记录下、 docker ps -a 2.停止docker systemctl stop docker 3.进入docker 容器文件夹&#xff0c;找到对应容器的位置&#xff1a; docker的默认文件夹应该是/var/lib/docker 如果不是root用户查看的话&#xff0c;可能会出现权限…...

C语言实现归并排序算法(附带源代码)

归并排序 把数据分为两段&#xff0c;从两段中逐个选最小的元素移入新数据段的末尾。 可从上到下或从下到上进行。 动态效果过程演示&#xff1a; 归并排序&#xff08;Merge Sort&#xff09;是一种分治算法&#xff0c;它将一个数组分为两个子数组&#xff0c;分别对这两个…...

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…...

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…...

数学建模-------误差来源以及误差分析

绝对误差&#xff1a;精确值-近似值&#xff1b; 举个例子&#xff1a;从A到B&#xff0c;应该有73千米&#xff0c;但是我们近似成了70千米&#xff1b;从C到D&#xff0c;应该是1373千米&#xff0c;我们近似成了1370千米&#xff0c;如果使用绝对误差&#xff0c;结果都是3…...

Arduino和MPLAB X 开发STM32F103和PIC16F15376

要点&#xff1a; 使用Arduino开发STM32F103&#xff08;Blue Pill&#xff09;&#xff0c;MPLAB X 开发PIC16F15376&#xff08;Curiosity Nano&#xff09;C/C嵌入式开发ESP32(Arduino、ESP-IDF)和STM32实时操作系统FreeRTOS STM32使用FreeRTOS示例 在使用 FreeRTOS 时&a…...

手机操作系统Android

▶1.Android系统概述 Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发&#xff0c;它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备&#xff0c;如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机&#xff0c;以后Android逐渐扩展到平板计算机、电视、…...

2024年,你是否还在迷茫?

2024年&#xff0c;你是否还在迷茫&#xff1f; 别担心&#xff01;鸿蒙来了&#xff0c;这个未来技术的制高点&#xff0c;为你提供了答案&#xff01; 诸多大厂疯抢、24年预计鸿蒙相关的岗位需求将达到百万级、就业均薪达到19K&#xff0c;全国高校开课…… 种种现象都在表…...

ART: Automatic multi-step reasoning and tool-use for large language models 导读

ART: Automatic multi-step reasoning and tool-use for large language models 本文介绍了一种名为“自动推理和工具使用&#xff08;ART&#xff09;”的新框架&#xff0c;用于解决大型语言模型&#xff08;LLM&#xff09;在处理复杂任务时需要手动编写程序的问题。该框架可…...

Github 2024-01-26 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-26统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4Jupyter Notebook项目2HTML项目1Shell项目1Dockerfile项目1非开发语言项目1Go项目1Rust项目1 高级…...

免费的 UI 设计资源网站 Top 8

今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站&#xff0c;尤其是一些材料站。它们是免费下载的&#xff0c;材料的风格目前很流行&#xff0c;适合不同的项目。非常适合平面设计WEB/UI设计师收藏&#xff0c;接下…...

人机协同对人工智能治理的影响

人机协同对人工智能治理的影响是多方面的。 首先&#xff0c;人机协同可以提供更有效的人工智能监管和治理机制。人工智能系统通常需要大量的数据来训练和运行&#xff0c;而人类在监管和治理方面有独特的能力。通过人机协同&#xff0c;人们可以利用他们的主观意见和专业知识来…...

Form.List的使用,设置某个字段的值

1.Form.Item的name <Form.Itemname{[base_range, company_base_range_start]}dependencies{[[base_range, company_base_range_end]]}rules{[{ required: true, message: 请输入下限 },{validator: (_, value) >validateMoneyRule(value,base_range?.company_base_range…...

React16源码: React中的updateHostComponent的源码实现

updateHostComponent 1 &#xff09;概述 在 completeWork 阶段的 HostComponent 处理&#xff0c;继续前文所述在更新的逻辑里面&#xff0c;调用了 updateHostComponent进行前后props对应的dom的attributes变化的对比情况这个方法也是根据不同环境来定义的&#xff0c;我们这…...

uniapp导入uView组件库

目录 准备工作 1. 新建一个项目 2. 导入uview组件库 3. 关于SCSS 配置步骤 1. 引入uView主JS库 2. 在引入uView的全局SCSS 3. 引入uView基础样式 4. 配置easycom组件模式 添加效果实验运行即可成功 准备工作 1. 新建一个项目 2. 导入uview组件库 在进行配置之前&#x…...

防御保护----防火墙的安全策略、NAT策略实验

实验拓扑&#xff1a; 实验要求&#xff1a; 1.生产区在工作时间&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;内可以访问DMZ区&#xff0c;仅可以访问http服务器&#xff1b; 2.办公区全天可以访问DMZ区&#xff0c;其中10.0.2.10可以访问FTP服务器和HTTP服务器…...

# 安徽锐锋科技IDMS系统简介

IDMS 由安徽锐锋科技独立开发 该系统负责和海算以及UE\UNITY的无缝衔接并具备远程数据库访问、高速数据库的自动创建及数据存储、支持MQTT等多种物联网接口&#xff0c;支持多种算法。主要完成由于物料、人员、生产、故障、不良异常、订单异常带来的生产损失&#xff0c;通过海…...

Notepad在文件中查找多行相同内容的文字

Notepad在文件中查找多行相同的内容 查找&#xff1a;打开 Notepad软件&#xff0c; Ctrl F 查找 。输入关键词&#xff0c; 点击【在当前文件中查找】。 复制&#xff1a;直接在下方的【搜索结果】复制。 Notepad提取含有特定字符串的行 详情见&#xff1a; https://blog…...

Python高超音速导弹

Python高超音速导弹的全自动化开发研发具有重要性的原因如下&#xff1a; 提高研发效率&#xff1a;全自动化开发可以通过自动化工具和流程&#xff0c;快速完成各种任务&#xff0c;包括代码编写、测试、集成和部署等。这样可以大大提高研发效率&#xff0c;缩短开发周期。 减…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...