亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        C++封裝的用于存放內(nèi)存塊的雙向循環(huán)列表

        字號:


            C++有許多已經(jīng)封裝好的數(shù)據(jù)結(jié)構(gòu),但是當(dāng)數(shù)據(jù)不是標(biāo)準(zhǔn)數(shù)據(jù)時,存在很大麻煩,如內(nèi)存塊時。
            直接進入話題吧:
            如題:
            結(jié)構(gòu)頭文件
            #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:
            };
            結(jié)構(gòu)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 ;
            }