青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-91  評論-137  文章-0  trackbacks-0

我們知道對于一個數據堆,有申請內存塊,釋放內存塊等操作.

應此我們給出3個數組,分別為內存堆,標記數組,使用是否數組和一個變量用于表示內存堆內剩余空間數.
1     CHAR HeapData[HEAP_LENGTH];
2     CHAR HeapApplyed[HEAP_LENGTH];
3     CHAR HeapUsed[HEAP_LENGTH];
4 
5     int HeapLeft;                            // 剩余Heap大小
初始化時將3個數組全部設為0.
1         memset(HeapData,0,HEAP_LENGTH);
2         memset(HeapApplyed,0,HEAP_LENGTH);
3         memset(HeapUsed,0,HEAP_LENGTH);
然后我們需要一個New操作來申請一塊尚未使用的內存塊.
 1     CHAR* New(const int Size)
 2     {
 3         if(Size > HeapLeft) throw HEAP_OVERFLOW;
 4         int iEmpty = GetEmptyLeft(Size);
 5 
 6         memset(HeapApplyed + iEmpty,1,Size); // 將內存塊標記
 7 
 8         HeapLeft -= Size;
 9         return HeapData + iEmpty;
10     }
一個Free操作來釋放一個內存塊.
1     BOOL Free(const int Offset,const int Size)
2     {
3         if(!Apply(Offset,Size)) throw HEAP_NOTAPPLY;
4         memset(HeapApplyed + Offset,0,Size);    // 設置為未標記
5         memset(HeapUsed + Offset,0,Size);        // 標記為未使用
6         HeapLeft += Size;
7         return TRUE;
8     }
一個GetEmptyAddr操作來獲得第一個符合指定大小的空閑內存卡塊.
 1     CHAR* GetEmptyAddr(const int Size)
 2     {
 3         for(int i=0;i<HEAP_LENGTH;i++)
 4             if(HeapApplyed[i] && !HeapUsed[i]) // 已標記并未使用
 5             {
 6                 BOOL bContinue = FALSE;
 7                 for(int j=i;j<Size;j++)
 8                     if(!HeapApplyed[j] || HeapUsed[j]) // 未標記或已使用
 9                     {
10                         bContinue = TRUE;
11                         break;
12                     }
13                 if(bContinue) continue;
14                 return HeapData + i;
15             }
16         return 0;
17     }
和一個SetData操作來設置數據.
1     BOOL SetData(const int Offset,const Type* Data,const int Size)
2     {
3         if(!Apply(Offset,Size)) throw HEAP_NOTAPPLY;
4         memcpy(HeapData + Offset,Data,Size);    // 拷貝數據
5         memset(HeapUsed + Offset,1,Size);        // 標記為已使用
6         return TRUE;
7     }
最后我們來測試一下這個堆結構.
 1     try
 2     {
 3         Heap<CHAR> heap;
 4         heap.New(9000);
 5 
 6         int i = 1000;
 7         heap.Free(0,100);
 8         printf("EmptyAddr:%X\n",heap.GetEmptyAddr(sizeof(int)));
 9 
10         int* Addr1 = (int*)heap.GetEmptyAddr(sizeof(int));
11         heap.SetData((CHAR*)Addr1 - *heap,(CHAR*)&i,sizeof(int));
12 
13         printf("The Data In Heap:%d\n",*Addr1);
14 
15         heap.New(100);
16         printf("EmptyAddr:%X\n",heap.GetEmptyAddr(sizeof(int)));
17 
18         CHAR str[] = "aaaaa";
19         CHAR* Addr2 = heap.GetEmptyAddr(strlen(str));
20         heap.SetData(Addr2 - *heap,str,strlen(str));
21 
22         printf("The Data In Heap:%s\n",Addr2);
23 
24         printf("EmptyAddr:%X\n",heap.GetEmptyAddr(sizeof(int)));
25     }
26     catch(int i)
27     {
28         switch(i)
29         {
30         case HEAP_OVERFLOW:
31             printf("堆溢出\n");
32             break;
33         case HEAP_NOTAPPLY:
34             printf("錯誤的地址\n");
35             break;
36         }
37     }
測試結果:
1 EmptyAddr:4EFB0
2 The Data In Heap:1000
3 EmptyAddr:4EF4C
4 The Data In Heap:aaaaa
5 EmptyAddr:4EF51

下面給出完整代碼
posted on 2011-02-15 20:59 lwch 閱讀(2116) 評論(3)  編輯 收藏 引用 所屬分類: 數據結構

評論:
# re: 簡單的堆結構實現 2011-02-16 09:31 | 戰魂小筑
GetEmptyAddr用for也太慢了吧,改成堆棧好些  回復  更多評論
  
# re: 簡單的堆結構實現 2011-02-17 13:20 | 淘寶皇冠店
好  回復  更多評論
  
# re: 簡單的堆結構實現 2013-05-03 15:57 | tb
拿來練手一下  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合九色综合欧美就去吻 | 久久久国产一区二区| 国产一区二三区| 国产婷婷一区二区| 怡红院精品视频| 亚洲激情视频| 一本久久a久久精品亚洲| 亚洲日本va午夜在线电影| 永久久久久久| 亚洲一区二区三区视频播放| 亚洲午夜国产成人av电影男同| 亚洲制服av| 亚洲视频网站在线观看| 久久精品一区二区国产| 国产一区二区三区的电影 | 久久成人精品无人区| 亚洲大胆人体视频| 欧美日韩一区二区三区视频| 亚洲最新中文字幕| 亚洲一级在线| 亚洲国产高清在线| 国产欧美日韩精品丝袜高跟鞋| 中文成人激情娱乐网| 99国产精品私拍| 欧美精品久久99久久在免费线| 欧美精品少妇一区二区三区| 亚洲字幕在线观看| 久久综合亚州| 亚洲一区二区3| 久久久久久欧美| 老司机免费视频一区二区| 亚洲国产美女| 国产在线欧美| 国产麻豆精品在线观看| 久久久久国产精品午夜一区| 久久人人97超碰精品888| 91久久综合| 久久人人97超碰精品888| 久久成人这里只有精品| 亚洲精选大片| 欧美激情一级片一区二区| 在线电影国产精品| 另类春色校园亚洲| 久久综合色影院| 亚洲激情网站| 亚洲人成网站精品片在线观看 | 在线视频亚洲一区| 一区二区免费在线播放| 亚洲第一区在线观看| 久久久精品999| 亚洲福利专区| 日韩一区二区高清| 国产欧美精品一区二区三区介绍| 亚洲影院一区| 久久精品国产第一区二区三区最新章节 | 国内精品99| 在线观看日韩欧美| 亚洲精品国产品国语在线app| 欧美成人自拍| 久久久久网站| 国产精品一二| 91久久国产精品91久久性色| 国产精品久久久久天堂| 久久综合伊人| 国产精品视频在线观看| 亚洲国产欧美另类丝袜| 国产一区二区三区丝袜 | 亚洲视频中文| 久久精品视频免费| 午夜性色一区二区三区免费视频| 榴莲视频成人在线观看| 欧美一级淫片aaaaaaa视频| 欧美激情四色| 国产一区二区三区高清播放| 一区二区三区高清在线观看| 亚洲高清电影| 女人香蕉久久**毛片精品| 久久精品国产亚洲精品| 国产精品红桃| 午夜视频在线观看一区| 久久国内精品视频| 韩国一区电影| 久久综合色婷婷| 亚洲国产1区| 亚洲网在线观看| 国产色产综合色产在线视频| 性xx色xx综合久久久xx| 久久精品在线观看| 亚洲人成绝费网站色www| 欧美高清在线| 欧美一区2区三区4区公司二百| 久久天天躁夜夜躁狠狠躁2022 | 久久久欧美精品| 亚洲青色在线| 国产在线视频欧美| 欧美日韩精品高清| 欧美一区二区国产| 亚洲国产成人在线播放| 亚洲午夜激情在线| 亚洲电影欧美电影有声小说| 国产精品v亚洲精品v日韩精品| 欧美在线观看网站| 亚洲女同在线| 亚洲最新在线视频| 亚洲福利在线视频| 免费毛片一区二区三区久久久| 亚洲欧美一区在线| 亚洲午夜激情免费视频| 欧美成人日本| 亚洲欧美国产另类| 这里只有精品视频| 亚洲精选久久| 日韩网站在线观看| 日韩亚洲欧美成人| 亚洲精品激情| 一区二区三区欧美成人| 日韩一级片网址| 一本色道久久综合亚洲91| 亚洲精品日韩在线观看| 亚洲全部视频| 宅男噜噜噜66一区二区66| 中日韩美女免费视频网址在线观看 | 欧美福利电影网| 欧美电影美腿模特1979在线看| 久久综合激情| 欧美精品三级在线观看| 国产精品yjizz| 国产视频在线一区二区| 精品粉嫩aⅴ一区二区三区四区| 亚洲福利电影| 欧美一区=区| 欧美激情黄色片| 午夜在线播放视频欧美| 久热国产精品视频| 国产精品入口| 日韩亚洲欧美高清| 久久一二三四| 在线一区亚洲| 欧美日韩一区二区三区在线视频| 国产精品日本精品| 亚洲麻豆国产自偷在线| 久久综合久久美利坚合众国| 亚洲免费观看视频| 久久久久久久久久看片| 欧美成人首页| 久久久久久久一区| 国产精品视频久久久| 99天天综合性| 亚洲精品免费在线播放| 卡一卡二国产精品| 亚洲国产精品视频一区| 麻豆免费精品视频| 久久国产精品99久久久久久老狼| 欧美视频一区二区三区四区| 最近中文字幕mv在线一区二区三区四区 | 在线日韩av片| 亚洲第一页自拍| 欧美日韩在线播放一区| 夜夜爽www精品| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 午夜久久久久久久久久一区二区| 欧美美女bbbb| 亚洲视频一起| 久久精品视频99| 亚洲国产aⅴ天堂久久| 亚洲国产第一页| 国产精品久久久久三级| 久热re这里精品视频在线6| 美日韩精品视频免费看| 亚洲一区二区三区777| 亚洲男女毛片无遮挡| 国内一区二区三区在线视频| 老司机精品视频一区二区三区| 欧美精品一区二区三区四区| 亚洲欧美国产高清| 久久久久久一区二区| 美日韩精品视频免费看| 久久九九精品99国产精品| 欧美成人精品1314www| 香蕉久久夜色精品国产使用方法| 久久亚洲欧洲| 久久人人九九| 国产手机视频精品| 亚洲一区二区欧美| 日韩网站在线| 欧美黄色aa电影| 蜜月aⅴ免费一区二区三区| 国产精品国产三级国产专播精品人| 老司机免费视频久久| 国产欧美日韩精品一区 | 亚洲男人天堂2024| 欧美精品一区在线观看| 亚洲国产精品久久久久秋霞影院| 国产日韩欧美一区二区| 中文欧美字幕免费| 午夜精品在线看| 国产亚洲激情视频在线| 久久精品亚洲乱码伦伦中文| 久久中文精品| 亚洲精品免费网站|