电子说
在一般的链表中,数据是存储在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
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !