- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第
第 PAGE 1 页 共 NUMPAGES 1 页
什么是环形队列?C语言环形队列的特点与实现
一、什么是(环形)队列? 环形缓冲区是一个非常典型的数据结构,这种数据结构符合生产者,消费者模型,可以理解它是一个水坑,生产者不断的往里面灌水,消费者就不断的从里面取出水。 ? 那就可能会有人问,既然需要灌水,又需要取出水,为什么还需要开辟一个缓冲区内存空间呢?直接把生产者水管的尾部接到消费者水管的头部不就好了,这样可以省空间啊。 答案是不行的,生产者生产水的速度是不知道的,消费者消费水的速度也是不知道的,如果你强制接在一起,因为生产和消费的速度不同,就非常可能存在水管爆炸的情况,你说这样危险不危险? 在(音频)系统框架下,alsa就是使用环形队列的,在生产者和消费者速度不匹配的时候,就会出现xrun的问题。 二、环形队列的特点 1、数组构造环形缓冲区 假设我们用数组来构造一个环形缓存区,如下图所示: array[p_ring_buff-W%LEN] = data;p_ring_buff-W ++;//printf(inset:%d %d,data,p_ring_buff-W);return (0);}/*读取环形队列数据*/int ring_buff_get(struct ring_buff * p_ring_buff){int data = 0;if(p_ring_buff == NULL){ ? printf(p null); ? return (-1);}if(get_ring_buff_emptystate(p_ring_buff) == 1){printf(buff is empty);return (-2);}data = p_ring_buff-array[p_ring_buff-R%LEN];p_ring_buff-R++;return data;}/*销毁*/int ring_buff_destory(struct ring_buff * p_ring_buff){if(p_ring_buff == NULL){ ? printf(p null); ? return (-1);}free(p_ring_buff);return (0);}int main(){int i = 0;/*定义一个环形缓冲区*/ring pt_ring_buff = fifo_init();/*向环形缓冲区中写入数据*/for(i = 0;i ? array[p_ring_buff-W%LEN] = data;p_ring_buff-array[p_ring_buff-Wp_ring_buff-W ++;//printf(inset:%d %d,data,p_ring_buff-W);return (0);}/*读取环形队列数据*/int ring_buff_get(struct ring_buff * p_ring_buff){int data = 0;if(p_ring_buff == NULL){ ? printf(p null); ? return (-1);}if(get_ring_buff_emptystate(p_ring_buff) == 1){printf(buff is empty);return (-2);}//data = p_ring_buff-array[p_ring_buff-R%LEN];data = p_ring_buff-array[p_ring_buff-Rp_ring_buff-R++;return data;}/*销毁*/int ring_buff_destory(struct ring_buff * p_ring_buff){if(p_ring_buff == NULL){ ? printf(p null); ? return (-1);}free(p_ring_buff);return (0);}int main(){int i = 0;/*定义一个环形缓冲区*/ring pt_ring_buff = fifo_init();/*向环形缓冲区中写入数据*/for(i = 0;i ? 四、总结 环形队列的使用场景非常多,安卓的音频数据读写,很多都用到环形队列,我们在开发过程中使用的环形队列肯定比我上面的那个例子要复杂的多,我这里演示的是比较简单的功能,但麻雀虽小,五脏俱全,希望这个麻雀让你们了解这个数据结构,在实际项目中大展身手。 ?
您可能关注的文档
- 2《走月亮》第二课时 课件(共19张PPT).docx
- 【英语阅读训练】Unit 7 Teenagers should be allowed to choose their own clothes 人教新目标版 九年级全册(pdf版,含答案).docx
- 零缺陷培训心得【3篇】.docx
- 新一届党支部委员会全体会议主持词.docx
- 湘教版地理八年级上册3.4中国的海洋资源素养提升练(含解析).docx
- 苏教版 三年级上册同步训练 第三单元《长方形和正方形》章节复习巩固(原卷+解析版).docx
- 新手术室工作计划7篇.docx
- 统编版语文五年级上册语文园地二 课件(共32张PPT).docx
- 西师大版四年级数学下册 第六单元《探索规律》(教案+作业设计).docx
- 三年级语文《美丽的小兴安岭》教案(4篇).docx
- 陕旅版(三起)英语四年级下册 绘本阅读Keep Walking 教案.docx
- 高考升学宴学子致辞.docx
- 学生教师节的讲话稿7篇.docx
- 防范鼠疫应急预案.docx
- 江苏省南通市2023年小学毕业暨学业质量监测试卷六年级语文(PDF 有答案).docx
- 2023年八年级暑期话题阅读天天练:宇宙(含解析).docx
- 出租租房合同模板.docx
- 学生会权益部工作总结【8篇】.docx
- 古诗词诵读:《虞美人 》学案 2023-2024统编版必修上册.docx
- 人教版七年级下册 Unit 2 What time do you go to school?Section B(2a-Self Check)导学案.docx
最近下载
- 推拿学试题库(附参考答案).docx VIP
- 探讨平台经济下灵活就业人员的劳动权益保护问题.docx VIP
- 重症患者的营养支持PPT.ppt VIP
- 南瑞集团-水轮发电机组状态监测整体解决方案.pdf VIP
- 第二单元第1课《山水相逢》课件2025-2026学年人美版(2024)八年级美术上册 (1).pptx VIP
- 标准图集-华北-08BJ6-1地下工程防水1.pdf VIP
- 第2课 中国人首次进入自己的空间站(1课时)-课件(共23张PPT).pptx VIP
- 物业项目经理面试的53个经典问题(附参考答案).doc VIP
- 《观赏植物介绍》课件.ppt VIP
- 水电站碾压混凝土施工工法--rcc工法.doc VIP
文档评论(0)