可pop任意字节的队列

电子说

1.3w人已加入

描述

前言

在一般的链表中,数据是存储在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

审核编辑:刘清

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分