前言
在一般的链表中,数据是存储在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;
对于具体的原理实现,我们可以用一张图片来清楚地说明一下:
例子
下面是一个完整的的代码例子供参考,可以直接运行:
#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模式下。
探索字节队列的魔法:多类型支持、函数重载与线程安全
探索字节队列的魔法:多类型支持、函数重载与线程安全代码难度指数:文章学习重点:参数宏的使用技巧一、引言在嵌入式系统和实时应用中,数据的传输和处理是至关重要的。字节队列(ByteQueu
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
POP3协议和Base 64编码原理
POP3适用于C/S结构的脱机模型,是因特网电子邮件的第一个离线协议标准,Base 64是一种很常见的编码规范,被设计用来将任意序列的8字节描述为一种不易被人直接识别的形式
发表于 01-12 19:08
•2157次阅读
AWorks软件设计,邮箱、消息队列和自旋锁使用方法
本文介绍了邮箱、消息队列和自旋锁的使用方法。信号量只能用于任务间的同步,不能传递更多的信息,为此,AWorks提供了邮箱和消息队列服务,它们的主要区别在于支持的消息长度不同,在邮箱中,每条消息的长度固定为4字节,而在消息
可pop任意字节队列代码的优化
因为这个功能是通过头结点的链表的实现的,而在上分代码中,使用者可以通过调用的到头结点信息,然后使用者就可以对这个链表进行任意操作,这样就很危险。
FreeRTOS消息队列介绍
队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做
MCU专属队列功能模块之QueueForMcu应用
当需要从队列头部获取多个数据,但又不希望数据从队列中删除时,可以使用 Queue_Peek_Array 函数来实现,该函数的参数与返回值与 Queue_Pop_Array 完全相同。
发表于 03-20 11:44
•412次阅读
评论