0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是队列?不受类型限制的队列如何实现

冬至配饺子 来源:最后一个bug 作者:bug菌 2022-08-12 09:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、初识size_t

这里可能大部分都不太知道有size_t这样的一个数据类型,可以说该类型是英文size type的一个缩写,它是一种记录数据大小的数据类型(可以认为是一种整形数据)。其实我们经常使用的sizeof()的返回值数据类型就是size_t,只是我们常常用一个整形比如int来保存返回值。

值得我们注意得是:

sizeof类型是一个与操作系统相关得数据类型,它主要是为了提高C语言的可移植性和可读性而加入的,可以说它并不是一种基本的数据类型,而且在头文件中用typedef来重命名的数据类型。其实在我们平时很多地方都用到了size_t,比如:

poYBAGL1qh6AYh20AAAj7JvUFGA004.png

我们使用的时候几乎都用整形比如int变量来使用,并没有使用到size_t类型,所以说尽管我们的int依赖于C编译器,有些情况size_t并不是固定的,如果我们用基本类型替换可能带来数据类型过小或者过大的问题,过小可能会导致数据溢出问题,过大可能导致运行速度降低!
size_t的使用:只要是用到sizeof等返回值,或者传入值的变量都定义为size_t类型!

2、什么是队列?

队列—

一种特殊的操作受限制得线性表,用户仅允许在线性表的头部获取数据,在尾部插入数据,所以大家也叫FIFO(先进先出)线性表。

形象一点的表达

:类似于一队人排队钻进一根只能进入一个人的管子,先进去的人先出来,后面的人只能在从同一个口子进入!

队列的类型:

顺序队列和循环队列。顺序队列,出队列指针必须>或者=入队列指针,否则容易出现假溢出现象;而循环队列只要入队列指针与出队列指针不再次重合就不回溢出!

3、不受类型限制的队列实现

首先我们先贴上刚刚写好的Queue.h和Queue.c文件

poYBAGL1qnqAMV7gAAFKVcP9Sws614.png

pYYBAGL1qoGAYmiJAAFDHSF_4Hc866.png

poYBAGL1qoaACHUeAAESAE9aqkQ694.png

pYYBAGL1qo2AYiJoAAC53sBnHt8401.png

poYBAGL1qrqAIybVAADqgoePl0s061.pngpoYBAGL1qsGAbHMXAADP9acB7uY706.png

解析代码:

1)节点数据结构中采用void类型的指针,能够指向任意数据类型来扩展我们的队列。

2)队列数组顺序队列,我们可以通过修改扩展变成循环队列,便于我们使用。

3)具体的使用可以参考上面的例子进行开发。

4、队列的应用

1)队列可以作为一种数据缓冲,当我们的数据无法实时进行发送的时候,可以进行适当的队列缓冲,集中到一定的数据,然后进行打包发送。

2)队列可以实现任务之间的一个信息交互,可以解决一些多线程问题,实现一种任务之间的异步处理。

3)由于是队列的一个先进先出特点,我们也可以利用队列来严格的控制数据的顺序。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9452

    浏览量

    156228
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144695
  • 多线程
    +关注

    关注

    0

    文章

    279

    浏览量

    20922
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言的循环队列

    循环队列(Circular Buffer) typedef struct { int buffer[SIZE]; int head; int tail; int count
    发表于 12-12 08:28

    NVMe高速传输之摆脱XDMA设计54:如何测试队列管理功能2

    , 表示操作顺序错误; 创建 I/O 完成队列和提交队列后, 先删除完成队列, 返回错误值为 8, 表示操作顺序错误。 打印信息显示测试结果与预期设计功能一致, 成功执行了队列的创建和
    发表于 12-10 08:33

    NVMe高速传输之摆脱XDMA设计53:如何测试队列管理功能

    本博文主要交流设计思路,希望对初学者有用。注意这里只是抛砖引玉,切莫认为参考这就可以完成商用IP设计。若有NVME或RDMA 产品及项目需求,请看B站视频后联系。 这里通过实际环境中测试队列
    发表于 12-09 08:21

    优先级队列介绍

    队列(Queue)的知识点:「概念」:队列是一种先进先出(FIFO)的数据结构,类似于排队的概念。「基本操作」:enqueue(item): 将元素添加到队列的末尾。dequeue(): 从
    发表于 11-26 07:56

    基于环形队列的UART收发回显实验

    问题。在本实验中,我们使用环形队列实现实验1的串口收发回显,将串口接收到的数据暂存在队列中,待完成一次接收后再将队列中的数据全部发出去。
    的头像 发表于 10-27 13:51 1730次阅读
    基于环形<b class='flag-5'>队列</b>的UART收发回显实验

    NVMe高速传输之摆脱XDMA设计37:队列管理功能验证与分析1

    本文主要交流设计思路,在本博客已给出相关博文九十多篇,希望对初学者有用。注意这里只是抛砖引玉,切莫认为参考这就可以完成商用IP设计。若有产品或项目需求,请看B站视频后联系 队列管理功能主要包含创建
    发表于 10-13 11:17

    NVMe IP高速传输却不依赖XDMA设计之九:队列管理模块(上)

    这是采用PCIe设计NVMe,并非调用XDMA方式,后者在PCIe4.0时不大方便,故团队直接采用PCIe设计,结合UVM验证加快设计速度。 队列管理模块采用队列的存储与控制分离的设计结构。
    的头像 发表于 08-04 09:53 611次阅读
    NVMe IP高速传输却不依赖XDMA设计之九:<b class='flag-5'>队列</b>管理模块(上)

    NVMe高速传输之摆脱XDMA设计十:队列管理模块设计(下)

    数量的2倍,要保证仲裁效率和良好的时序,只能降低提交队列数量,导致性能下降。而完成队列管理单元所实现的结构只占用两个仲裁请求输入,基于此可以增加更多的I/O提交队列,充分发挥SSD性能
    发表于 07-30 16:27

    NVMe高速传输之摆脱XDMA设计九:队列管理模块设计(上)

    条目,一个提交队列管理单元用于实现提交队列存储地址空间的管理和门铃控制。在提交队列管理单元中,构建一个admin提交队列表单和N个I/O提交
    发表于 07-27 17:41

    RabbitMQ消息队列解决方案

    在现代分布式系统架构中,消息队列作为核心组件,承担着系统解耦、异步处理、流量削峰等重要职责。RabbitMQ作为一款成熟的消息队列中间件,以其高可用性、高可靠性和丰富的特性,成为众多企业的首选方案。本文将从运维工程师的角度,详细阐述RabbitMQ从单机部署到集群搭建的完
    的头像 发表于 07-08 15:55 449次阅读

    精通 MQTT:消息队列遥测传输指南!

    引言MQTT(消息队列遥测传输)是一种轻量级消息协议,专为低带宽、高延迟和不可靠的网络环境设计。它广泛应用于物联网(IoT)应用、消息系统以及实时数据通信领域。本指南深入探讨了MQTT的工作原理
    的头像 发表于 06-16 16:56 849次阅读
    精通 MQTT:消息<b class='flag-5'>队列</b>遥测传输指南!

    向FreeRTOS的任务中发送事件队列是有什么限制吗?

    到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。 一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。 所以向FreeRTOS的任务中发送事件队列是有什么限制
    发表于 06-11 07:57

    RDMA简介5之RoCE V2队列分析

    工作队列元素(WQE),该元素包括数据发送缓冲区的起始地址、数据长度、操作类型等相关信息,用于后续的传输操作。在该WQE被网卡操作结束后,网卡将生成一个CQE并放入与工作队列(SQ)对应的完成
    发表于 06-05 17:28

    NVME控制器之队列管理模块

    队列管理模块是整个NVMe Host控制器的核心模块,该模块实现了提交队列与完成队列的管理,多队列请求的仲裁判决等功能。
    发表于 05-03 20:19

    NVME控制器之队列管理模块

    队列管理模块是整个NVMe Host控制器的核心模块,该模块实现了提交队列与完成队列的管理,多队列请求的仲裁判决等功能。
    的头像 发表于 05-03 15:32 437次阅读
    NVME控制器之<b class='flag-5'>队列</b>管理模块