网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 C++封装的用于存放内存块的双向循环列表
内容
    C++有许多已经封装好的数据结构,但是当数据不是标准数据时,存在很大麻烦,如内存块时。
    直接进入话题吧:
    如题:
    结构头文件
    #include <stdio.h>
    #include <stdlib.h>
    #define uint unsigned int
    typedef 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)
    {
    }
    NetData::~NetData()
    {
    }
    void NetData::Lockdata()
    {
    printf("Lockedn");
    this->Lock = 1 ;
    }
    void NetData::UnLockdata()
    {
    printf("UnLockedn");
    this->Lock = 0 ;
    }
    void NetData::WaitUnLock()
    {
    while(this->Lock==1)
    {
    usleep(200000);
    }
    printf("UnLockedn");
    }
    void NetData::Entity_entity(pdatabuf Node,char *Addr,uint Len)
    {
    Node->Addr = Addr ;
    Node->Len = 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 ;
    pDel->next->previous = pNode ;
    pDel->previous = NULL ;
    pDel->next = NULL ;
    free(pDel->Addr);
    free(pDel);
    return 1 ;
    }
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/21 15:19:54