环形队列的实现 [详解在代码中]

这篇具有很好参考价值的文章主要介绍了环形队列的实现 [详解在代码中]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1 package DataStructures.Queue.Array.Exerice;
  2 
  3 /**
  4  * @author Loe.
  5  * @project DataStructures&Algorithms
  6  * @date 2023/5/8
  7  * @ClassInfo 环形队列
  8  *            主要使用取模的特性来实现环形特征
  9  */
 10 public class CirularQueue {
 11     //当前队列大小
 12     public int maxSize;
 13     //队列
 14     public int[] queue;
 15     //指向第一个元素
 16     public int front;
 17     //指向最后一个元素的再后一个元素
 18     public int rear;
 19 
 20     public CirularQueue(int maxSize) {
 21         this.maxSize = maxSize;
 22         //创建队列数组
 23         this.queue = new int[maxSize];
 24         //初始化指针
 25         this.front = 0;
 26         this.rear = 0;
 27     }
 28 
 29     public void addQueue(int data){
 30         if (this.isFull()){
 31             System.out.println("队列已满~");
 32 
 33         }else{
 34             //因为real指向的最后一个元素的后一个元素
 35             //所以这里可以直接使用并赋值
 36             //初始化为0可以理解为:
 37             //- 初始化时,最后一个元素的索引是 -1
 38             this.queue[this.rear] = data;
 39 
 40             //解决环形队列问题
 41             //在以往我们需要将rear++
 42             //并且保证rear是小于maxSize即可
 43             //但环形队列需要用一种方法来把 rear 困在 maxSize中
 44             //使其从始至终都无法超过maxSize
 45             //所以我们使用 "取模运算" 来实现
 46             this.rear = (rear + 1) % maxSize;
 47         }
 48     }
 49 
 50     /**
 51      * 取出元素方法
 52      * 在这个方法中我们需要解决 front索引指向的位置问题
 53      * 同 add 一样,我们也需要将front困在maxSize中
 54      */
 55     public int getData(){
 56         //如果为空
 57         if (isEmpty()){
 58             System.out.println("无法取出,队列为空~");
 59         }
 60         //由于我们需要对front进行操作
 61         //所以将front先前指向的值取出,存到一个临时变量中
 62         int upData = this.queue[this.front];
 63 
 64         //接下来对front进行操作
 65         this.front = (this.front + 1) % this.maxSize;
 66 
 67         return upData;
 68     }
 69 
 70 
 71     //展示队列
 72     public void show(){
 73         for (int i = this.front; i < front + size(); i++) {
 74             System.out.printf("队列元素索引[%d]=%d\n",i % this.maxSize,this.queue[i % this.maxSize]);
 75         }
 76     }
 77 
 78 
 79     //判断是否为空
 80     public boolean isFull(){
 81         //队列满的条件是什么?
 82         //以往: rear == maxSize
 83         //为适配环形队列,条件改为:
 84         //(rear + 1) % maxSize == front
 85         return (this.rear + 1) % maxSize == front;
 86     }
 87 
 88     public boolean isEmpty(){
 89         return this.rear == this.front;
 90     }
 91 
 92     //获取当前队列可用的元素数量
 93     public int size(){
 94         return (rear + maxSize - front) % maxSize;
 95     }
 96 
 97 
 98 
 99     public int getMaxSize() {
100         return maxSize;
101     }
102 
103     public void setMaxSize(int maxSize) {
104         this.maxSize = maxSize;
105     }
106 
107     public int[] getQueue() {
108         return queue;
109     }
110 
111     public void setQueue(int[] queue) {
112         this.queue = queue;
113     }
114 
115     public int getFront() {
116         return front;
117     }
118 
119     public void setFront(int front) {
120         this.front = front;
121     }
122 
123     public int getRear() {
124         return rear;
125     }
126 
127     public void setRear(int rear) {
128         this.rear = rear;
129     }
130 }

 文章来源地址https://www.toymoban.com/news/detail-436687.html

到了这里,关于环形队列的实现 [详解在代码中]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】基于环形队列的生产者消费者模型的实现

    文章目录 前言 一、基于环形队列的生产者消费者模型的实现 上一篇文章我们讲了信号量的几个接口和基于环形队列的生产者消费者模型,下面我们就快速来实现。 首先我们创建三个文件,分别是makefile,RingQueue.hpp,以及main.cc。我们先简单搭建一下环形队列的框架: 首先我们

    2024年02月11日
    浏览(42)
  • 数据结构—循环队列(环形队列)

    循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且 队尾被连接在队首之后以形成一个循环 。它也被称为“ 环形缓冲器 ”。 循环队列的一个好处是可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素

    2024年02月11日
    浏览(38)
  • verilog手撕代码5——计数器(置位、加减、环形、扭环形、格雷码计数器实现)

    2023.5.12 编写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号 zero ,当置位信号 set 有效时,将当前输出置为输入的数值 set_num 。 注意 :这里zero=1和num=0是同一拍输出的,按道理如果根据num=0,然后去输出zero=1应该延迟一拍。所以这里考虑将number延迟一

    2024年02月07日
    浏览(52)
  • C语言之环形队列

    环形队列是一种特殊的队列,它可以解决普通队列在使用时空间利用不充分的问题。在环形队列中,当队列满时,队列的尾指针指向队列的起始位置,而不是指向队列的最后一个元素。这样可以在不浪费空间的情况下存储更多的元素。 下面我们来详细讲解一下环形队列的实现

    2024年02月04日
    浏览(21)
  • c语言环形队列

    一位数组队列 全部打印 只打印发送 inux c 建立一个256M大小的一位数组环形队列,建立两个线程一个用于读取指定文件内容存入环形队列,一个用UDP每次读取环形队列中8192字节发送到指定地址,不足8192仅发送剩余数据。读取数据时最大以1024字节为一包数据读取,读取时每包

    2024年02月07日
    浏览(30)
  • 【数据结构】设计环形队列

    环形队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 环形队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元

    2024年02月09日
    浏览(95)
  • 环形队列+DMA空闲中断+接收串口数据

    本次实验利用环形队列+DMA空闲中断+串口。。通过这个实验可以非常深入的理解队列,DMA,串口的知识。如果你能自己实现掌握这个实验,那么你应该基本掌握了队列,DMA,串口的知识。 本次使用的是用环形队列当缓冲器区接收串口数据。我们可以先区了解DMA的空闲中断。本次

    2024年02月13日
    浏览(39)
  • 【并发编程】无锁环形队列Disruptor并发框架使用

    Disruptor 是苹国外厂本易公司LMAX开发的一个高件能列,研发的初夷是解决内存队列的延识问顾在性能测试中发现竟然与10操作处于同样的数量级),基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCn演讲后,获得了业界关注,201年,企业应用软件专家Martin Fower专门撰

    2024年02月14日
    浏览(38)
  • 【Linux】生产者消费者模型(阻塞队列与环形队列)和POSIX信号量

    我们这里举一个例子,来解释生产者消费者模型,我们学生–消费者,供应商–生产者,超市–交易场所,我们买东西只需要关系售货架子上是否有商品即可,没有了商品,超市从供应商进行供货。供应商和供应商不能同时向一个货架进行供货,所以生产者之间是互斥的关系

    2024年02月03日
    浏览(37)
  • 【Linux】生产者消费者模型:基于阻塞队列和环形队列 | 单例模式线程池

    死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 当多线程并发执行并都需要访问临界资源时,因为每个线程都是不同的执行流,这就有可能 导致数据不一致问题 ,为了避免此问题的发生

    2024年01月24日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包