首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    04 环形队列

    04 环形队列 上一章说到的数组模拟队列存在的问题,问题分析并优化 目前数组使用一次就不能用,没有达到复用的效果 将这个数组使用算法,改进成一个环形队列 1.数组模拟环形队列 对前面的数组模拟队列的优化...因此将数组看做是一个环形的。(通过去模的方式来实现即可) 分析说明: 尾索引的下一个为头索引时,表示队列满。...即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意(rear+1)%maxsize==front 满 rear==front 空 实现思路如下: front指针含义调整,front指向队列第一个元素...也就是array[front]就是队列的第一个元素。front初始值=0。 rear变量的含义调整,rear指向队列的最后一个元素的后一个位置。因为希望空出一个空间作为约定。rear初始值=0。...(为什么要取模,因为是环形同时有rear可能是最大的然后跑到最前面来;假如:rear=1,front=0,maxsize=10 再套入公式中 (1+10-0)%10=1 有效数据为1) 2.代码实现 public

    37220

    go 环形队列

    环形队列 队列又称为“先进先出”(FIFO)线性表,限定只能在队尾插入,在队首删除 顺序队列:顺序存储结构,数组 链队列:链表结构。...内存上并没有环形的结构,因此环形队列实际上是数组的线性空间来实现的。 当数据到了尾部该如何处理呢?...它将转回到原来位置进行处理,通过取模操作来实现 golang环形队列实现 什么是环形队列 如图所示,一个环形队列.含有二个指针: 队列头指针,队列尾指针....实现环形队列图示过程 初始化一个数组大小为6的环形队列, 头指针front=0, 尾指针rear=0, 刚好front=rear =0的状态,表示环形队列为空. 2.向环形队列里插入1个元素,则rear...} // 清空 func (s *CircleQueue) Clear() { s.head = 0 s.tail = 0 s.data = make([]any, s.length) } 测试

    98320

    稀疏数组 & 环形队列

    记录原数组有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,这个小规模的数组就叫稀疏数组 ---- java开发那些事 ---- 3、案例: 现有如下的 6 * 7...二、环形队列 1、普通队列存在什么问题?...这时队列明明是空的,但是却不能再入队元素的,因为满足rear = capacity - 1,也就是相当于这队列是一次性的,用过之后就不能再用了,即使为空也不能再入队了,造成空间的浪费,所以环形队列就出现了...2、环形队列实现思路: 环形队列中的几个重要属性: rear:指向队列尾巴的后一个位置,初始值为0 front:指向队列的头部,即第一个元素所在的位置,初始值为0 capacity:队列的容量 下面是环形队列的一些算法...入队操作时:rear = (rear + 1) % capacity 出队操作时:front = (front + 1) % capacity; 判断队列是否已满是环形队列中最重要也是最难理解的地方

    44320

    4-1-关于环形队列

    现在看看实际的 1.环形队列管理程序 ?...3.通过环形队列函数往数组里面存数据 ? ? ? 4.通过环形队列函数往数组里面存数据 ? 5.取出来几个数据 ? ? 咱存储数据的时候存储的顺序是 1,2,3,4,5,6依次存进去的....其实黄框位置在环形队列管理函数里面认为是空位置. 现在看典型应用 1,说明 首先环形队列适用于很多场合,尤其是一边存数据一边处理数据的场合. 2.使用环形队列缓存串口数据 ? ? ?...我的所有的项目都是使用的环形队列做数据处理..../yangfengwu/p/14620102.html 4.用户只需要知道,环形队列就是一个缓存数据的方式 此节代码中还有使用中断发送数据,缓存也是使用的环形队列 其实就是把数据放到环形队列,然后打开中断发送

    38830

    go语言数据结构 环形队列

    1.环形队列是什么 队列是一种常用的数据结构,这种结构保证了数据是按照“先进先出”的原则进行操作的,即最先进去的元素也是最先出来的元素.环形队列是一种特殊的队列结构,保证了元素也是先进先出的,但与一般队列的区别是...,他们是环形的,即队列头部的上个元素是队列尾部,通常是容纳元素数固定的一个闭环。...C代码实现见:https://github.com/dodng/fast_ring_queue 2.环形队列的优点   1.保证元素是先进先出的 是由队列的性质保证的,在环形队列中通过对队列的顺序访问保证...在最典型的生产者消费者模型中,如果引入环形队列,那么生成者只需要生成“东西”然后放到环形队列中即可,而消费者只需要从环形队列里取“东西”并且消费即可,没有任何锁或者等待,巧妙的高效实现了多线程数据通信。...5.实际测试效果 在CentOS 5.5 (cpu每核主频1200MHz)设备上简单测试了一下。

    1.7K30

    丢给你个环形队列玩玩

    一,其实环形队列就是利用一些函数把一个数组的首位连接起来,然后实现如下功能 环形队列的存在解决了一个最典型的问题: 假设我需要处理10000个字节的数据,就是串口一次性会发过来10000个字节,然后单片机每次取...利用环形队列的话,我可以定义一个20字节的数组,串口中断里面不停的往里面存数据,我主循环不停的查询这个数组里面是否够10字节了, 如果够了,我就从里面取出来10字节处理,然后不停的循环....三,创建一个数组   创建一个环形队列管理变量  然后把数组交给环形队列函数去管理 ? ? ? 四,把数据写入环形队列 ? 五,读出数据,输出每10个数据的累加和  ? ?...六,测试 01 01 01 01 01 01 01 01 01 01 01   先发 11个0x01 ?...如果环形队列满了,这个标志位将置位 处理数据的时候判断一下这个标志位是否置位,如果置位说明本次的数据有丢失!

    42550

    柔性数组和环形队列之间的故事

    刚好,之前发关于环形队列的文章有些问题,这次刚好拿出来一起说一下,并用柔性数组实现一个环形队列。...柔性数组的上一篇文章 环形队列C语言实现文章 1、环形队列文章之前的代码有bug /*插入数据*/ int ring_buff_insert(struct ring_buff * p_ring_buff...测试地址空间 #include "stdio.h" #include"malloc.h" struct flex_array{ int i; int arr[0]; }; int main...4、使用柔性数组实现环形队列 /* 实现的最简单的ringbuff 有更多提升空间,可以留言说明 */ #include "stdio.h" #include "stdlib.h" #include "...*/ int get_ring_buff_fullstate(struct ring_buff * p_ring_buff) { /*如果写位置减去读位置等于队列长度,就说明这个环形队列已经满*

    54440

    来看看加入环形队列的串口发送数据

    一,为什么要使用环形队列来发送数据?是为了解决什么问题呢! ? 这节说了怎么用中断发送数据,但是大家是否想过,这种中断发送有个bug,看一下下面的 ? ?...直接利用环形队列是很好的选择. 我把发送的数据写入环形队列,然后打开串口发送中断 串口发送中断里面判断环形队列里面的数据个数是不是大于0,如果是就读出来发出去! 二,定义一些变量 ? ? ? ?...三,然后把数组交给 环形队列变量去管理 ? 四,串口发送中断里面就是这样 ? 五,修改一下环形队列的一个函数,填充完数据就打开中断 ? 六,现在测试 ? ? 现在的数据不会出现丢失!...注意:即使是使用了环形队列也不要在主循环里面 ? 环形队列缓存也有限! 只要波特率定好了,中断发送每一位数据的时间是一定的,发送数据就一定需要时间! 现在是直接造成死机, ?...其实造成死机的原因是因为环形队列里面使用的printf, ? 而printf 并不是中断发送,造成了冲突 ? 改一下 ? ?

    1.9K20

    环形队列到底是怎么回事?

    前两天看到一位朋友 作者发哥的一篇C语言环形队列文章:C语言,环形队列,写的非常好。...那时就是用,因为大概知道原理,就没有认真的去分析代码的实现细节,这次刚好看到发哥文章下有很多关于环形队列的留言讨论,我就详细的去看了一下之前用的代码,发现收获还是不小的,在此分享给大家。...问题1:如何初始化环形队列? 回答:只要定义一个ring_buffer_t类型的结构体,然后调用ring_buffer_init()函数初始化即可。...#define RING_BUFFER_SIZE 128 问题3:为什么环形队列长度必须是2的n次方?...head_index 的值是一直++的,从0一直加到RING_BUFFER_MASK,然后再回到0继续加(形成一个环形)。

    85740

    数据结构 | TencentOS-tiny中队列环形队列、优先级队列的实现及使用

    环形队列 2.1. 环形队列的特点 普通队列的入队操作将队尾指针后移+1,出队操作将队头指针后移+1,操作几次之后会发现队头指针和队尾指针都跑到缓冲区的尾部去了: ?...显然这种队列使用方式太不方便了,所以就诞生了环形队列:「不用搬移元素和指针,一直可以重复利用这段内存空间」。 ? 2.2....环形队列的实现 TencentOS-tiny中环形队列的实现在tos_ring_queue.h和tos_ring_queue.c中。...环形队列使用Demo 编写如下的测试代码: #include typedef struct item_st { int a; int b; int c; }...优先级队列的实现 TencentOS-tiny中环形队列的实现在tos_prio_queue.h和tos_prio_queue.c中。

    86620

    java 优先级队列_JAVA 队列

    PriorityQueue类在Java1.5中引入并作为 Java Collections Framework 的一部分。...优先队列要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中的元素。 优先队列的头是基于自然排序或者Comparator排序的最小元素。...PriorityQueue是非线程安全的,所以Java提供了PriorityBlockingQueue(实现BlockingQueue接口)用于Java多线程环境。...下面我们通过两段简单代码来体会一下优先级队列的使用, 1、使用优先级队列实现Integer类型数据自动排序, //测试优先级队列自动排序 public static List insertSort...queue.isEmpty()){ break; } System.out.println(one.getId() + " " + one.getName()); } } 同样,给出测试方法

    53210

    java 排序队列_java实现顺序队列

    public classArrayQueueLoop {public static voidmain(String[] args) {//TODO Auto-generated method stub//测试代码...//测试数组循化队列 CircleQueue testQueue=new CircleQueue(4);//设置的是有效的数据,存在有一个空间作为约定 char key=’ ‘;//接受用户的输入 Scanner...):从队列取出队列”); System.out.println(“h(head):查看队列头的数据”); key=in.next().charAt(0);switch(key) {case ‘s’: testQueue.showQueue...private int[] arr;//该数组用于存放队列,模拟队列//创建队列的构造器 public CircleQueue(intarrMaxSize) { maxSize=arrMaxSize...; arr=new int[maxSize]; front=0;//指向队列的头部,初始值为0 rear=0;//指向队列的尾部的后一个位置,初始值为0 }//判断队列是否满 public booleanisFull

    56630
    领券