C++封装的用于存放内存块的双向循环列表
来源:互联网 发布:一元夺宝源码 编辑:程序博客网 时间:2024/06/01 18:36
C++有许多已经封装好的数据结构,但是当数据不是标准数据时,存在很大麻烦,如内存块时。
直接进入话题吧:
如题:
结构头文件
#include <stdio.h>#include <stdlib.h>#define uint unsigned inttypedef struct databuf{char *Addr ;unsigned int Len ;databuf *next;databuf *previous;}databuf,*pdatabuf ;class NetData{public:pdatabuf Data ;bool Lock ;NetData();~NetData();void Lockdata();void UnLockdata();void WaitUnLock() ; void Entity_entity(pdatabuf Node,char *Addr,uint Len); /* first is messy print */ void Entity_print(pdatabuf Node); void PrintList(pdatabuf phead); /* Length 1 no data only head */ int GetLength(pdatabuf phead); pdatabuf Before_Null_Node(pdatabuf phead); /* Create,return Node add */ pdatabuf CreateNode(pdatabuf previous,char *Addr,uint Len); pdatabuf CreateNode_Head(); /* Add Node between */ void AddNode(pdatabuf pNode,pdatabuf pNode2,char *Addr ,uint Len); /* Delete next Node */ bool DeleteNode(pdatabuf pNode);private:protected:};
结构CPP文件
NetData::NetData():Lock(0){this->Data = CreateNode_Head() ;}NetData::~NetData(){}void NetData::Lockdata(){ printf("Locked\n"); this->Lock = 1 ;}void NetData::UnLockdata(){ printf("UnLocked\n"); this->Lock = 0 ;}void NetData::WaitUnLock(){ while(this->Lock==1) { usleep(200000); } printf("UnLocked\n");}void NetData::Entity_entity(pdatabuf Node,char *Addr,uint Len){ Node->Len = Len ; Node->Addr = (char*)malloc(sizeof(char)*Node->Len); memset(Node->Addr,0,Node->Len); memcpy(Node->Addr,Addr,Node->Len);}pdatabuf NetData::CreateNode_Head(){ pdatabuf pNode = (pdatabuf)malloc(sizeof(databuf)); assert(pNode!=NULL); pNode->next = NULL ; pNode->previous = pNode; return pNode ;}/* first is messy print */void NetData::Entity_print(pdatabuf Node){}void NetData::PrintList(pdatabuf phead){ pdatabuf p = phead ; while(p!=NULL) { Entity_print(p); p = p->next ; }}/* Length 1 no data only head */int NetData::GetLength(pdatabuf phead){ pdatabuf p = phead ; int Length=0 ; while(p!=NULL) { Length ++ ; p = p->next ; } return Length ;}pdatabuf NetData::Before_Null_Node(pdatabuf phead){ pdatabuf p = phead ; while(p->next!=NULL) { p=p->next ; } return p ;}/* Create,return Node add */pdatabuf NetData::CreateNode(pdatabuf previous,char *Addr ,uint Len){ pdatabuf pNode = (pdatabuf)malloc(sizeof(databuf)); assert(pNode!=NULL); pNode->next = NULL ; pNode->previous = previous ; Entity_entity(pNode,Addr,Len); return pNode ;}/* Add Node between */void NetData::AddNode(pdatabuf pNode,pdatabuf pNode2,char *Addr,uint Len){ pdatabuf pNew = CreateNode(pNode,Addr,Len); pNode->next = pNew ; pNew->next = pNode2 ; //pNew->previous = pNode ;}/* Delete next Node */bool NetData::DeleteNode(pdatabuf pNode){ pdatabuf pDel = pNode->next ; if(pDel==NULL) { printf(" No Node to Delete "); return 0 ; } pNode->next = pDel->next ; if(pDel->next!=NULL) { pDel->next->previous = pNode ; } pDel->previous = NULL ; pDel->next = NULL ; //free(pDel->Addr); free(pDel); return 1 ;}
使用此封装好的结构,改变类的名字,或者重新申请即可。
- C++封装的用于存放内存块的双向循环列表
- CircleMsgQueue 用于存放 指定大小的,循环的,消息队列
- 删除双向循环列表的共同节点
- [C] 双向循环链表宏实现的坑
- C\C++动态申请内存用于存放二维数组
- 双向循环列表的增加和删除结点
- 双向 列表的实现
- 对不同数据类型拼接成一个内存块的封装
- 双向循环列表建立
- [C++]一个我比较常用的循环双向链表
- 双向循环链表 C语言通用编程的思考
- 双向循环链表的C语言实现
- 双向循环链表的实现(C)
- 数据结构的C实现_双向循环链表
- c语言 双向循环链表的简单应用
- c语言:双向循环链表的实现
- c语言实现的双向循环链表
- 【C++】模板实现带头节点的双向循环链表
- Codeforces Round #180
- hook zwcreateprocessex
- 关于IT,关于技术
- 纹理描述方法(持续更新中)
- 高精度运算
- C++封装的用于存放内存块的双向循环列表
- myeclipse和eclipse手动安装svn
- crontab执行脚本中文乱码,手动执行没有问题
- java水仙花数
- Apache与Tomcat整合
- rqnoj-389
- 开源 免费 java CMS - FreeCMS1.3-系统配置
- linux x86下依赖于动态链接库so的cpp程序编译
- Python多线程