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

    文章

    8768

    浏览量

    152330
  • C语言
    +关注

    关注

    180

    文章

    7618

    浏览量

    138519
  • 多线程
    +关注

    关注

    0

    文章

    278

    浏览量

    20103
收藏 人收藏

    相关推荐

    JavaWeb消息队列使用指南

    在现代的JavaWeb应用中,消息队列(Message Queue)是一种常见的技术,用于异步处理任务、解耦系统组件、提高系统性能和可靠性。 1. 消息队列的基本概念 消息队列是一种应用程序对应
    的头像 发表于 11-25 09:27 220次阅读

    探索字节队列的魔法:多类型支持、函数重载与线程安全

    探索字节队列的魔法:多类型支持、函数重载与线程安全代码难度指数:文章学习重点:参数宏的使用技巧一、引言在嵌入式系统和实时应用中,数据的传输和处理是至关重要的。字节队列(ByteQueue)是一种重要
    的头像 发表于 11-15 01:08 963次阅读
    探索字节<b class='flag-5'>队列</b>的魔法:多<b class='flag-5'>类型</b>支持、函数重载与线程安全

    为什么同一个队列引用的全局变量,运行在两个子vi中发现队列数据丢失了

    我创建了一个队列,然后将队列引用做了个全局变量,运行在两个子vi中,一个是只入队列,另一个是只出队列。但我发现,一个字vi数据入队列成功,检
    发表于 11-14 11:47

    嵌入式环形队列与消息队列实现原理

    嵌入式环形队列,也称为环形缓冲区或循环队列,是一种先进先出(FIFO)的数据结构,用于在固定大小的存储区域中高效地存储和访问数据。其主要特点包括固定大小的数组和两个指针(头指针和尾指针),分别指向队列的起始位置和结束位置。
    的头像 发表于 09-02 15:29 761次阅读

    玩转RT-Thread之消息队列的应用

    在嵌入式系统开发中,实时处理串口和ADC数据是一项重要的任务。本文将介绍如何在RT-Thread实时操作系统中,利用消息队列来同时处理来自串口和ADC的数据。通过这种方法,我们能够高效地管理和处理
    的头像 发表于 07-23 08:11 706次阅读
    玩转RT-Thread之消息<b class='flag-5'>队列</b>的应用

    在arduino平台上开发esp32c3,twai队列异常的原因?

    twai_get_status_info。发现在TX队列里有一个数据。但是当任务到主循环的开头再次读取状态时则发现数据跑到了RX队列,而实际上CAN总线上并没有发送任何数据给ESP32C3。
    发表于 06-11 06:16

    请问如何在keil中调试模式下查看FreeRTOS中消息队列的情况?

    在watch窗口中输入消息队列的名称 显示的是一个地址值
    发表于 05-08 07:16

    freertos启用IAR自带插件调试时不能查看队列信息怎么解决?

    在IAR平台上调试freertos,想利用IAR自带的freertos插件进行调试,但是只能看task的信息,不能看队列信息显示
    发表于 05-07 06:54

    嵌入式实时操作系统中的队列管理与应用

    任务 A 将信息存入队列,任务B以先进先出的方式提取信息。队列通常应足够大,可以承载许多数据,而不仅仅承载单个数据项。因此,它可以充当缓冲或暂存器,为管道提供灵活性。
    发表于 04-30 14:27 752次阅读
    嵌入式实时操作系统中的<b class='flag-5'>队列</b>管理与应用

    Freertos队列项里的字节长度是否可以获取?

    最近刚学Freertos, 看到可以获取Freertos队列长度,但是队列项里的字节长度是否可以获取? 因为项目中队列中会存放不定长字节,需要对队列中的数据分拣,每次分拣的时候遍历所
    发表于 04-29 07:17

    freertos队列错乱是什么原因导致的?

    最近调试//发送两个队列 xResult = xSemaphoreTake(xSemaphore, (TickType_t)1); if(xResult == pdTRUE
    发表于 04-26 06:20

    用FreeRTOS使用队列怎么发送一个结构体呢?

    在函数osMessageGet 只能返回一个4个字节啊。在xQueueReceive它只传了一个uint32_tv啊,只有四个字节。 那就限制了最大的数据就是四个字节了,感觉应该不会是这样啊,那么我
    发表于 04-17 07:35

    进程间通信的消息队列介绍

    消息队列是一种非常常见的进程间通信方式。
    的头像 发表于 04-08 17:27 373次阅读

    Linux 6.9-rc1发布,加入定时器、工作队列及AMD P-State优化

    在内核方面,6.9版本进行了定时器的大幅重构,增加了每个CPU核心的时间轮支持,以提升定时器运效率,尤其在网络应用中表现出色。此外,工作队列子系统新增BH工作队列支持,摒弃了老旧的tasklet机制。
    的头像 发表于 03-25 13:49 531次阅读

    MCU专属队列功能模块之QueueForMcu应用

    当需要从队列头部获取多个数据,但又不希望数据从队列中删除时,可以使用 Queue_Peek_Array 函数来实现,该函数的参数与返回值与 Queue_Pop_Array 完全相同。
    发表于 03-20 11:44 606次阅读
    MCU专属<b class='flag-5'>队列</b>功能模块之QueueForMcu应用