• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-91  評論-137  文章-0  trackbacks-0
            繼上篇《簡單堆結構的實現》之后修改了下代碼,使內存的分配效率更高.
            首先將HeapApplyed和HeapUsed包含進一個結構體HEAPATTR,各占1位.
            1     struct HEAPATTR
            2     {
            3         BYTE HeapApplyed : 1;
            4         BYTE HeapUsed : 1;
            5     }*HeapAttr;
            然后添加了一個HeapCurrent變量用于提高檢索速度.
            1 int        HeapCurrent;
            相應的構造函數和析構函數修改為.
             1     Heap(const int Size = 1024 * 300)
             2         : HeapLength(Size),HeapCurrent(0),HeapLeft(Size)
             3     {
             4         HeapData = new CHAR[HeapLength];
             5         HeapAttr = new HEAPATTR[HeapLength];
             6         memset(HeapData,0,HeapLength);
             7         memset(HeapAttr,0,HeapLength);
             8     }
             9 
            10     ~Heap()
            11     {
            12         delete[] HeapData;
            13         delete[] HeapAttr;
            14     }
            注意:一個HEAPATTR結構占1個字節,實際上使用的只有2位,編譯器自動為其補齊6位形成1字節(既然只有TRUE和FALSE沒理由要用HeapLength*2字節)
            修改GetEmptyAddr算法,使其提升效率.
             1     CHAR* GetEmptyAddr(const int Size)
             2     {
             3         int Left = 0;
             4         for(int i=HeapCurrent;i<HeapLength;i++)
             5         {
             6             if(HeapAttr[i].HeapApplyed && !HeapAttr[i].HeapUsed) Left++;
             7             else Left = 0;
             8             if(Left == Size) return HeapData + i - Left + 1;
             9         }
            10         if(HeapCurrent > 0 && HeapCurrent > Size)
            11         {
            12             Left = 0;
            13             for(int i=0;i<HeapCurrent;i++)
            14             {
            15                 if(HeapAttr[i].HeapApplyed && !HeapAttr[i].HeapUsed) Left++;
            16                 else Left = 0;
            17                 if(Left == Size) return HeapData + i - Left + 1;
            18             }
            19         }
            20         return 0;
            21     }
            同時也將GetEmptyLeft修改為.
             1     inline int GetEmptyLeft(int Size)
             2     {
             3         int Left = 0;
             4         for(int i=HeapCurrent;i<HeapLength;i++)
             5         {
             6             if(!HeapAttr[i].HeapApplyed) Left++;
             7             else Left = 0;
             8             if(Left == Size) return i - Left + 1;
             9         }
            10         if(HeapCurrent > 0 && HeapCurrent > Size)
            11         {
            12             Left = 0;
            13             for(int i=0;i<HeapCurrent;i++)
            14             {
            15                 if(!HeapAttr[i].HeapApplyed) Left++;
            16                 else Left = 0;
            17                 if(Left == Size) return i - Left + 1;
            18             }
            19         }
            20         return 0;
            21     }
            添加DumpFile函數生成Dump文件.
            1     BOOL DumpFile(CHAR* FileName)
            2     {
            3         FILE* fp = fopen(FileName,"wt+");
            4         fwrite(HeapData,HeapLength,sizeof(CHAR),fp);
            5         fclose(fp);
            6         return TRUE;
            7     }

            最后給出完整代碼
            posted on 2011-02-22 17:29 lwch 閱讀(1936) 評論(1)  編輯 收藏 引用 所屬分類: 數據結構

            評論:
            # re: 堆結構的實現2 2013-05-03 15:58 | tb
            實現比較簡單啊   回復  更多評論
              
            97香蕉久久夜色精品国产| 久久精品无码午夜福利理论片| 无码日韩人妻精品久久蜜桃 | 久久精品无码一区二区三区日韩| 国产成人无码精品久久久久免费 | 久久国产精品免费一区二区三区| 亚洲精品美女久久久久99小说| 亚洲∧v久久久无码精品| 久久91精品国产91久久麻豆| 久久精品国产亚洲Aⅴ香蕉 | 成人午夜精品久久久久久久小说 | 人人狠狠综合久久亚洲高清| 精品国产福利久久久| 亚洲欧美日韩精品久久亚洲区| 久久水蜜桃亚洲av无码精品麻豆| 欧美激情精品久久久久久久 | 青春久久| 亚洲国产精品久久66| 久久久青草青青亚洲国产免观| 亚洲AV无一区二区三区久久| 青青草国产97免久久费观看| 精品久久久久久久| 国产精品视频久久| 99久久成人18免费网站| 久久国产色AV免费看| 久久精品国产清自在天天线 | 99久久精品午夜一区二区| 无码人妻久久一区二区三区免费丨| 久久久亚洲精品蜜桃臀| 久久99久久成人免费播放| 久久久久久久尹人综合网亚洲| 国产精品久久久久AV福利动漫| 精品久久人人爽天天玩人人妻| 亚洲国产成人久久笫一页| 一本久久a久久精品综合香蕉| 久久国产精品国语对白| 久久影视综合亚洲| 少妇熟女久久综合网色欲| 99久久免费国产精品特黄| 99久久99久久精品国产片果冻| 久久青青草原亚洲av无码app|