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

    文章

    7639

    浏览量

    148481
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128539
  • 多线程
    +关注

    关注

    0

    文章

    271

    浏览量

    19724
收藏 人收藏

    评论

    相关推荐

    裸机中环形队列与RTOS中消息队列有何区别呢?

    “环形队列”和“消息队列”在嵌入式领域有应用非常广泛,相信有经验的嵌入式软件工程师对它们都不陌生。
    的头像 发表于 01-26 09:38 245次阅读
    裸机中环形<b class='flag-5'>队列</b>与RTOS中消息<b class='flag-5'>队列</b>有何区别呢?

    labview 队列最前端插入的应用

    中起到很多作用。本文将详细介绍LabVIEW队列的应用,特别是在最前端插入数据的情况下。 首先,让我们了解LabVIEW队列的基本概念。队列是一种数据结构,允许在一端插入元素,并在另一端删除元素。在LabVIEW中,
    的头像 发表于 01-08 11:45 433次阅读

    聊一聊消息队列技术选型的7种消息场景

    我们在做消息队列的技术选型时,往往会结合业务场景进行考虑。今天来聊一聊消息队列可能会用到的 7 种消息场景。
    的头像 发表于 12-09 17:50 920次阅读
    聊一聊消息<b class='flag-5'>队列</b>技术选型的7种消息场景

    无锁队列解决的问题

    为什么需要无锁队列 无锁队列解决了什么问题?无锁队列解决了锁引起的问题。 cache失效 当CPU要访问主存的时候,这些数据首先要被copy到cache中,因为这些数据在不久的将来可能又会被处理器
    的头像 发表于 11-10 15:33 264次阅读
    无锁<b class='flag-5'>队列</b>解决的问题

    如何实现一个多读多写的线程安全的无锁队列

    在ZMQ无锁队列的原理与实现一文中,我们已经知道了ypipe可以实现一线程写一线程读的无锁队列,那么其劣势就很明显了,无法适应多写多读的场景,因为其在读的时候没有对r指针加锁,在写的时
    的头像 发表于 11-08 15:25 439次阅读
    如何<b class='flag-5'>实现</b>一个多读多写的线程安全的无锁<b class='flag-5'>队列</b>

    消息队列的发展历史

    上一篇我们用一个秒杀案例探讨了我们为什么需要消息队列。今天我们来回顾一下消息队列的发展历史。
    的头像 发表于 10-30 10:49 399次阅读
    消息<b class='flag-5'>队列</b>的发展历史

    单片机裸机实现队列功能的方案

    单片机裸机实现队列功能的方案
    的头像 发表于 10-17 14:34 315次阅读

    队列实现栈的两种方法

    两个队列实现一个栈 思路:两个队列实现一个栈,使用了队列交换的思想。 代码如下: type MyStack struct { queue1,
    的头像 发表于 10-08 16:01 424次阅读

    两个栈实现一个队列方法

    数据结构,同时也存在某种联系。用栈可以实现队列,用队列也可以实现栈。 两个栈实现一个队列 思路:
    的头像 发表于 10-08 15:54 580次阅读

    FreeRTOS消息队列结构体

    有一个结构体用于描述队列,叫做 Queue_t,这个结构体在文件 queue.c 中定义。 3、队列创建 在使用队列之前必须先创建队列,有两种创建
    的头像 发表于 07-06 17:03 677次阅读
    FreeRTOS消息<b class='flag-5'>队列</b>结构体

    FreeRTOS消息队列介绍

    队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做
    的头像 发表于 07-06 16:58 484次阅读
    FreeRTOS消息<b class='flag-5'>队列</b>介绍

    RTOS消息队列的应用

    基于RTOS的应用中,通常使用队列机制实现任务间的数据交互,一个应用程序可以有任意数量的消息队列,每个消息队列都有自己的用途。
    发表于 05-29 10:49 421次阅读
    RTOS消息<b class='flag-5'>队列</b>的应用

    单片机消息队列实现原理和机制

    单片机开发过程中通常会用到“消息队列”,一般实现的方法有多种。 本文给大家分享一下队列实现的原理和机制。
    的头像 发表于 05-26 09:50 870次阅读
    单片机消息<b class='flag-5'>队列</b>的<b class='flag-5'>实现</b>原理和机制

    利用C++提供的队列封装一个消息队列

    最近的C++项目中,需要用到消息队列,但是C++中又没有原生的消息队列,就在网上找了一下相关资料,利用C++提供的队列,自己封装一个消息队列,以后的项目也可以复用。
    的头像 发表于 05-20 15:16 1099次阅读
    利用C++提供的<b class='flag-5'>队列</b>封装一个消息<b class='flag-5'>队列</b>

    嵌入式环形队列和消息队列是如何去实现的?

    嵌入式环形队列和消息队列实现数据缓存和通信的常见数据结构,广泛应用于嵌入式系统中的通信协议和领域。
    发表于 05-20 14:55 670次阅读