当前位置: 首页 > news >正文 建站系统平台网站登记备案 个人 news 2025/10/31 17:47:24 建站系统平台,网站登记备案 个人,关键词分为哪三类,移动云网站建设队列#xff08;Queue#xff09;是一种重要的线性数据结构#xff0c;遵循先进先出、后进后出的原则。本文将更详细地介绍队列的概念、特点、Java 实现以及应用场景。 模运算小复习#xff1a; a % b 的值总是小于b 5 % 4 1 5 % 2 1 1 % 5 1 4 % 5 4 1. 队列… 队列Queue是一种重要的线性数据结构遵循先进先出、后进后出的原则。本文将更详细地介绍队列的概念、特点、Java 实现以及应用场景。 模运算小复习 a % b 的值总是小于b 5 % 4 1 5 % 2 1 1 % 5 1 4 % 5 4 1. 队列概念概述 想象一下排队买票先排队的人总是先买到票。队列就像这样元素从一端进入称为队尾Rear或尾指针tail从另一端取出称为队首Front或头指针head。元素的添加操作称为入队Enqueue或加入队列删除操作称为出队Dequeue或移出队列。 队列是一种抽象数据类型 (ADT)这意味着我们只关心它的操作和特性而不关心具体的实现方式。队列的关键操作包括 enqueue(item): 将元素 item 添加到队尾。 dequeue(): 移除并返回队首元素。 peek(): 返回队首元素但不移除它。 isEmpty(): 检查队列是否为空。 size(): 返回队列中元素的数量 (部分实现可能不包含此方法需要额外维护一个计数变量)。 2. 队列的特点 先进先出 (FIFO): 这是队列最核心的特点最先入队的元素总是最先出队。 操作受限: 只能在队尾入队在队首出队。这限制了访问元素的灵活性但也保证了操作的高效性 (时间复杂度通常为 O(1))。 3. 队列的 Java 实现 Java 中可以使用链表或环形数组实现队列。 3.1 基于链表的实现 public class LinkedListQueueT {private NodeT head; // 指向队首节点的指针private NodeT tail; // 指向队尾节点的指针private int size; // 记录队列大小private static class NodeT { // 链表节点的内部类T data;NodeT next;Node(T data) {this.data data;}}public LinkedListQueue() {this.head null;this.tail null;this.size 0;}public boolean isEmpty() {return size 0; // 或 head null}public int size() {return size;}//入队public void enqueue(T item) {NodeT newNode new Node(item);if (isEmpty()) {head newNode; // 如果队列为空新节点既是队首也是队尾} else {tail.next newNode; // 否则将新节点添加到队尾}tail newNode; // 更新队尾指针size;}//出队public T dequeue() {if (isEmpty()) {throw new NoSuchElementException(Queue is empty); // 使用更具体的异常类型}T data head.data;head head.next; // 更新队首指针if (head null) { // 如果队列只有一个元素出队后队列变空tail 也需要置空tail null;}size--;return data;}//返回队首元素public T peek() {if (isEmpty()) {throw new NoSuchElementException(Queue is empty);}return head.data;} } 3.2 基于环形数组的实现 好处 对比普通数组起点和终点更为自由不用考虑数据移动 “环”意味着不会存在【越界】问题 数组性能更佳 环形数组比较适合实现有界队列、RingBuffer 等 public class ArrayQueueT {private T[] data;private int head; // 队首指针private int tail; // 队尾指针private int capacity; // 数组容量private int size; // 队列大小public ArrayQueue(int capacity) {this.capacity capacity;this.data (T[]) new Object[capacity];this.head 0;this.tail 0;this.size 0;}public boolean isEmpty() {return size 0; // 或 head tail}public boolean isFull() {return size capacity; // 使用 size 判断是否满}public int size() { return size; }//入队public void enqueue(T item) {if (isFull()) {//throw new RuntimeException(Queue is full);resizeArray(); // 扩容操作}data[tail] item;tail (tail 1) % capacity; // 环形数组的关键使用模运算size;}//出队public T dequeue() {if (isEmpty()) {throw new NoSuchElementException(Queue is empty);}T item data[head];data[head] null; // 避免对象游离head (head 1) % capacity; // 环形数组的关键使用模运算size--;return item;}//返回队首元素public T peek() {if (isEmpty()) {throw new NoSuchElementException(Queue is empty);}return data[head];}private void resizeArray() { // 扩容方法示例int newCapacity capacity * 2;T[] newData (T[]) new Object[newCapacity];for (int i 0; i size; i) {newData[i] data[(head i) % capacity];}data newData;head 0;tail size;capacity newCapacity;} } 4. 队列的基本操作图解 4.1 下标计算 例如数组长度是 5当前位置是 3 向前走 2 步此时下标为 (3 2) % 5 0 cur 当前指针位置 step 前进步数 length 数组长度 4.2 判空 引入size属性后有两种方式 return tail size; //队列大小return size 0; 4.3 判满 引入size属性后有两种方式 return size capacity; //数组容量return (tail 1) % length head; 4.4 入队 假设入队前队空此时head tail 入队后head 不变tail 1代码中这样书写 tail (tail 1) % length保证了不会越界的情况不能设置为 tail 。此时a即是队头也是队尾。 4.5 出队 这里要牢记队列的特点先进先出、后进后出 假设此时a、b已入队现在a要出队出队前a是队头b是队尾 a出队后此时b成为新队头 4.6 返回队头元素 略具体实现首先确保不是空队列然后返回 data[head] 5. 各个操作的时间复杂度 入队 (enqueue): 数组实现: 均摊 O(1) (因为需要考虑扩容的情况但大多数情况下是 O(1)), 链表实现: O(1) 出队 (dequeue): O(1) 查看队首元素 (peek): O(1) 6. 队列的局限性 数组实现的假溢出: 使用环形数组实现时虽然解决了普通数组的一次性问题但仍然存在容量限制。需要仔细处理扩容操作。 固定大小在某些实现中队列的大小是固定的这意味着一旦队列满了就不能再添加新的元素除非移除一些元素。这可能导致数据丢失或需要额外的逻辑来处理溢出。 性能问题在基于数组的队列实现中如果队列经常达到其最大容量那么在队列的末尾添加元素可能需要数组的复制这会带来额外的时间成本。虽然这个操作是偶尔发生的但在高负载情况下可能会影响性能。 不适合随机访问队列不支持随机访问这意味着你不能直接访问队列中间的元素。如果你需要随机访问可能需要使用其他数据结构如数组或链表。 不适合实时系统在实时系统中队列可能不是最佳选择因为队列的操作入队和出队可能需要等待特别是在有大量并发操作时。 空间效率在基于数组的实现中即使队列中没有很多元素数组也可能被预分配了较大的空间这可能导致空间的浪费。 操作的局限性队列只允许在队尾添加元素在队头移除元素。如果需要在队列中间进行操作队列可能不是最合适的选择。 并发问题在多线程环境中队列的操作需要同步以避免竞态条件和数据不一致的问题。这可能需要额外的锁机制从而影响性能。 不适合处理大量数据如果需要处理大量数据队列可能不是最佳选择因为队列的操作可能会因为数据量大而变得缓慢。 不适合需要频繁插入和删除的场景如果应用场景中需要频繁地在队列的中间进行插入和删除操作队列可能不是最佳选择因为这些操作在队列中是不允许的。 不适合需要多种访问模式的场景如果应用需要多种不同的数据访问模式如堆栈的后进先出LIFO特性队列可能不足以满足需求。 7. 总结和应用场景 队列是一种简单但强大的数据结构其 FIFO 特性使其在许多场景下都非常有用例如 任务调度: 操作系统中的任务调度通常使用队列来管理待执行的任务保证先提交的任务先执行。例如打印队列按照先来先服务的顺序打印文档。 宽度优先搜索 (BFS): 图算法中常用的宽度优先搜索算法使用队列来存储待访问的节点 ensuring that nodes closer to the starting node are visited first. 缓冲区: 在生产者-消费者模型中队列可以作为缓冲区平衡生产者和消费者的速度差异。生产者将数据放入队列消费者从队列中取出数据。队列可以缓解生产和消费速度不匹配的问题避免数据丢失或程序阻塞. 例如网络请求中的缓冲区。 消息队列: 在分布式系统中消息队列用于异步通信。发送方将消息放入队列接收方从队列中取出消息。消息队列可以解耦发送方和接收方提高系统的可靠性和可扩展性。 例如Kafka, RabbitMQ. 理解队列的概念和实现对于程序员来说至关重要它能帮助我们更好地设计和优化程序。 希望本文能帮助各位看官更好地理解队列这种重要的数据结构下期见谢谢~ 文章转载自: http://www.morning.stwxr.cn.gov.cn.stwxr.cn http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn http://www.morning.kxscs.cn.gov.cn.kxscs.cn http://www.morning.bxczt.cn.gov.cn.bxczt.cn http://www.morning.rjrlx.cn.gov.cn.rjrlx.cn http://www.morning.gqtzb.cn.gov.cn.gqtzb.cn http://www.morning.clgbb.cn.gov.cn.clgbb.cn http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.mjctt.cn.gov.cn.mjctt.cn http://www.morning.clhyj.cn.gov.cn.clhyj.cn http://www.morning.ruyuaixuexi.com.gov.cn.ruyuaixuexi.com http://www.morning.zlhcw.cn.gov.cn.zlhcw.cn http://www.morning.ltzkk.cn.gov.cn.ltzkk.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.ypzr.cn.gov.cn.ypzr.cn http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.dzrcj.cn.gov.cn.dzrcj.cn http://www.morning.fwcjy.cn.gov.cn.fwcjy.cn http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn http://www.morning.rdkt.cn.gov.cn.rdkt.cn http://www.morning.mxnrl.cn.gov.cn.mxnrl.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.pplxd.cn.gov.cn.pplxd.cn http://www.morning.qbtj.cn.gov.cn.qbtj.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn http://www.morning.sgpnz.cn.gov.cn.sgpnz.cn http://www.morning.jntdf.cn.gov.cn.jntdf.cn http://www.morning.hdzty.cn.gov.cn.hdzty.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.wyctq.cn.gov.cn.wyctq.cn http://www.morning.gnbtp.cn.gov.cn.gnbtp.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.qkqpy.cn.gov.cn.qkqpy.cn http://www.morning.ywrt.cn.gov.cn.ywrt.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.plqhb.cn.gov.cn.plqhb.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.khntd.cn.gov.cn.khntd.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.fqpyj.cn.gov.cn.fqpyj.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn http://www.morning.pmxw.cn.gov.cn.pmxw.cn http://www.morning.gcszn.cn.gov.cn.gcszn.cn http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.kbqws.cn.gov.cn.kbqws.cn http://www.morning.myrmm.cn.gov.cn.myrmm.cn http://www.morning.dqpnd.cn.gov.cn.dqpnd.cn http://www.morning.ybnps.cn.gov.cn.ybnps.cn http://www.morning.ssgqc.cn.gov.cn.ssgqc.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn http://www.morning.tlyms.cn.gov.cn.tlyms.cn http://www.morning.lhwlp.cn.gov.cn.lhwlp.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.qqbw.cn.gov.cn.qqbw.cn http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.lrybz.cn.gov.cn.lrybz.cn http://www.morning.gjqgz.cn.gov.cn.gjqgz.cn http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn http://www.morning.wpcfm.cn.gov.cn.wpcfm.cn http://www.morning.mlpch.cn.gov.cn.mlpch.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn 查看全文 http://www.tj-hxxt.cn/news/265807.html 相关文章: 做外围网站犯法吗集团公司管理系统 吉林省住房和城乡建设厅网站申报百度收录怎么做 开发手机网站教程怎么查询一个网站从哪做的 学怎么做建筑标书哪个网站潍坊网站建设公司 做网站的图片需要多少钱扬州市建设局网站 竣工备案 金融直播网站建设带个人中心WordPress主题 企业网站 模版上海专业高端网站建设服务 西安网站建设网站自适应网站如何做mip 佛山顺德容桂网站制作网站建设建站流程方案 危险网站怎么办购物网站哪个东西便宜质量好 做网站的功能结构布局问答网站开发 网站怎么更新文章获取免费域名 哪些网站是由wordpress做的某网站建设策划方案 商城网站设计教程游戏开发入门 可做百度百科参考资料的网站网站常用 英文 防网站黑客wordpress管理地址 快速网站优化哪家好小程序定制开发的公司 做外贸网站公司公众号开发运营 动漫设计与制作主修课程有哪些网站文章来源seo 网站建设营销词手机域名注册被骗 网站建设你的选择龙岩有什么公司 新开传奇手游网站大全公司做网络营销 住房建设局网站首页表白网 汕头潮阳网站建设做分析报表的网站 购物网站的功能板块app制作培训 如何建广告网站工程建设管理网站源码 用专业的网络技术制作网站3d全屋定制设计软件 一般网站 广告做的网站百度搜不到 做3d动画的斑马网站主题资源网站建设模块五作业 如何用七牛云做视频网站网站建设基础策划