程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C++封裝的用於存放內存塊的雙向循環列表

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 ;
    }
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved