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

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

3天内不再提示

可pop任意字节的队列

冬至子 来源:技术铺子 作者:chasen 2023-01-18 15:02 次阅读

前言

在一般的链表中,数据是存储在node节点中的,每次pop出来的数据是以node为单位的。这篇文章,我们对一般的链表进行改进,可以pop任意字节的数据,也就是说,每次pop的数据数据是以任意字节为单位的,可以pop 10Byte,也可以500Byte,这种方法比较灵活。

原理

针对一般的链表,我们做的改进主要是在每个node中加了一个字段pos,用来标记这个node的data的下标。比如说这个node打data数据大小为10,它的pos就为0,这时候就表示这10个字节都可以用。然后可以pop 2个字节,这时候pos就成了2,表示还有8个字节可以用。

实现的话,我们可以定义这样的结构体:

typedef struct Node
{
    int id;             //每个link的标识符
    int pos;            //记录node数据的下标
    int size;           //记录node数据的总大小
    int num;            //记录link的node个数,仅头结点使用
    char *addr;         //数据data
    struct Node *next;  //next node
} Node;

对于具体的原理实现,我们可以用一张图片来清楚地说明一下:

2.jpg

例子

下面是一个完整的的代码例子供参考,可以直接运行:

#include 
#include 
#include 
#include 
#include 


class PkgLink
{
public:
    PkgLink() {m_link_header.clear();}
    ~PkgLink() {}


    typedef struct Node
    {
        int id;
        int pos;
        int size;
        int num; //for head;
        char *addr;
        struct Node *next;
    } Node;


    std::vector

审核编辑:刘清

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

    关注

    5

    文章

    961

    浏览量

    50843
收藏 人收藏

    评论

    相关推荐

    SIMPLIS POP仿真分析

    要说POP (Periodic operating Point )仿真在Simplis里面算比较特殊的功能了,只有在Simplis模式下才可以使用POP 仿真。所以启动POP仿真必须在Simplis模式下。
    的头像 发表于 11-10 15:11 2928次阅读
    SIMPLIS <b class='flag-5'>POP</b>仿真分析

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

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

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

    最近刚学Freertos, 看到可以获取Freertos队列长度,但是队列项里的字节长度是否可以获取? 因为项目中队列中会存放不定长字节
    发表于 04-29 07:17

    【MiCOKit试用体验】庆科MiCO系统篇(4)MiCO RTOS消息队列

    , uint32_tnumber_of_messages );该函数为初始化一个消息队列,参数1为指向要初始化的消息队列的句柄指针;参数2为消息队列的名称,由用户定义;参数3为将要进入队列
    发表于 10-24 17:03

    keystoneII arm示例程序网卡中断,请问队列收到包后,如果暂时不从队列pop包,是否可以在队列这个级别清除中断信号?

    描述:目前开发板示例程序网卡驱动中,接收用了queue-658,这个队列的中断信号直接给了中断控制器,请问,如果队列收到包后,如果暂时不从队列pop包的话,是否可以在
    发表于 08-03 07:43

    利用变体队列实现任意复杂数据集合传递(很方便)

    利用变体队列实现任意复杂数据集合传递(很方便),大家可以看看。原创是来自@zhihuizhou 【labview我来告诉你】实现任何LabVIEW数据类型集合的简洁方式。我在此基础上加了一些,方便大家理解这样的好处。
    发表于 02-11 15:39

    FreeRTOS消息队列和RT-Thread消息队列的使用注意事项介绍

    个数unsigned portBASE_TYPE uxItemSize ); // 单个消息最大字节uxQueueLength队列能够存储的最大单元数目,即队列深度。 uxItemSize队列
    发表于 05-25 15:32

    简单罗列几种队列管理逻辑电路

    的范围比buffer深度大,则不需要额外的标号记录空满状态。存在的问题,若buffer深度较大或队列数量较多,队列号和指针匹配逻辑会占用较多的资源。3 重力FIFO类似于排队,从队头开始寻找输出
    发表于 08-29 14:23

    什么是PoP

    什么是PoP  英文缩写: PoP 中文译名: 接入点 分  类: IP与多媒体
    发表于 02-23 09:41 1761次阅读

    POP3协议和Base 64编码原理

    POP3适用于C/S结构的脱机模型,是因特网电子邮件的第一个离线协议标准,Base 64是一种很常见的编码规范,被设计用来将任意序列的8字节描述为一种不易被人直接识别的形式
    发表于 01-12 19:08 2157次阅读
    <b class='flag-5'>POP</b>3协议和Base 64编码原理

    AWorks软件设计,邮箱、消息队列和自旋锁使用方法

    本文介绍了邮箱、消息队列和自旋锁的使用方法。信号量只能用于任务间的同步,不能传递更多的信息,为此,AWorks提供了邮箱和消息队列服务,它们的主要区别在于支持的消息长度不同,在邮箱中,每条消息的长度固定为4字节,而在消息
    的头像 发表于 06-13 09:13 1.2w次阅读
    AWorks软件设计,邮箱、消息<b class='flag-5'>队列</b>和自旋锁使用方法

    pop任意字节队列代码的优化

    因为这个功能是通过头结点的链表的实现的,而在上分代码中,使用者可以通过调用的到头结点信息,然后使用者就可以对这个链表进行任意操作,这样就很危险。
    的头像 发表于 01-18 14:56 566次阅读

    RTOS消息队列的应用

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

    FreeRTOS消息队列介绍

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

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

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