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

隨筆-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>
            久久久av网站| 欧美在线不卡| 亚洲剧情一区二区| 欧美久久久久久久久久| 一区二区三区av| 亚洲欧美激情四射在线日| 国产精品婷婷午夜在线观看| 久久狠狠亚洲综合| 久久午夜精品一区二区| 亚洲巨乳在线| 一区二区三区四区五区视频| 国产精品亚洲综合一区在线观看| 欧美一区=区| 老司机午夜精品视频在线观看| 亚洲欧洲一级| 亚洲一区二区视频在线观看| 国内精品久久久久影院优| 国产亚洲福利社区一区| 一区二区亚洲精品国产| 亚洲国产精品一区二区第一页| 免费观看成人网| 午夜精品影院在线观看| 蜜臀a∨国产成人精品| 一区二区三区蜜桃网| 亚洲欧美综合国产精品一区| 亚洲国产日韩一级| 午夜精品视频一区| 亚洲国产日韩欧美一区二区三区| 99国产精品国产精品久久| 国产一区二区剧情av在线| 91久久精品美女| 国内精品久久久久久久果冻传媒| 亚洲人成网站影音先锋播放| 国产在线播放一区二区三区| 亚洲欧洲另类| 亚洲高清网站| 欧美影院成年免费版| 亚洲一区二区三区午夜| 欧美成人69| 久久久久综合网| 国产精品美女诱惑| 亚洲日本欧美日韩高观看| 韩国av一区| 午夜精品美女自拍福到在线 | 亚洲免费影视| 亚洲精品一区二| 久久久久久尹人网香蕉| 午夜精品区一区二区三| 欧美日韩视频不卡| 亚洲片区在线| 亚洲三级免费电影| 久久亚洲图片| 久久亚洲一区| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲一区自拍| 亚洲欧美综合精品久久成人| 欧美涩涩视频| 一区二区三区精品| 中文久久乱码一区二区| 欧美激情视频在线免费观看 欧美视频免费一 | 久热精品在线视频| 美女精品自拍一二三四| 在线播放豆国产99亚洲| 欧美在线高清视频| 久久亚洲精品伦理| 影音先锋另类| 久久一区精品| 欧美不卡视频| 日韩视频国产视频| 欧美日韩一区二区高清| 99re66热这里只有精品3直播 | 黄色日韩网站| 久久一区免费| 亚洲国产专区| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美精品色一区二区三区| 亚洲精品日本| 香蕉亚洲视频| 狠狠色丁香婷综合久久| 久久一区二区三区av| 国产一二精品视频| 亚洲第一精品电影| 99视频精品全部免费在线| 欧美区一区二区三区| 亚洲午夜激情网站| 久久免费精品日本久久中文字幕| 激情视频一区| 欧美国产亚洲视频| 亚洲欧美成人一区二区三区| 久久综合激情| 一本色道**综合亚洲精品蜜桃冫| 国产精品v欧美精品v日本精品动漫| 午夜精品国产| 欧美88av| 亚洲欧美日韩天堂| 韩日精品中文字幕| 欧美日本韩国一区| 羞羞视频在线观看欧美| 欧美激情亚洲自拍| 亚洲男人第一网站| 在线观看的日韩av| 欧美日精品一区视频| 久久久久久网站| 99爱精品视频| 欧美jjzz| 性久久久久久久久| 日韩一区二区电影网| 国产一区二区三区日韩| 欧美日韩第一页| 久久九九免费视频| 亚洲视频免费观看| 亚洲国产老妈| 久久亚洲综合| 欧美一级播放| 一本色道久久88精品综合| 国产女主播一区二区三区| 欧美精品乱人伦久久久久久| 久久国产手机看片| 亚洲综合三区| 日韩视频一区二区| 亚洲国产91| 欧美+日本+国产+在线a∨观看| 亚洲欧美日韩在线观看a三区| 亚洲精品国产精品国自产观看浪潮| 国产嫩草一区二区三区在线观看| 欧美精品在线一区二区| 另类综合日韩欧美亚洲| 久久国产欧美| 久久www成人_看片免费不卡| 亚洲女同同性videoxma| 夜夜嗨一区二区三区| 亚洲精品中文在线| 亚洲人精品午夜| 欧美激情片在线观看| 久久婷婷国产综合国色天香| 久久精品国产999大香线蕉| 欧美一级一区| 亚洲一区二区三区色| 亚洲一级黄色av| 亚洲视频碰碰| 一区二区三区偷拍| 99国产精品视频免费观看| 亚洲精品视频免费观看| 亚洲欧洲在线一区| 亚洲精品一二| 这里只有精品电影| 亚洲网友自拍| 性欧美长视频| 久久久久久精| 毛片一区二区| 亚洲福利av| 亚洲日韩欧美视频一区| 亚洲精选中文字幕| 中文久久精品| 欧美在线视频免费观看| 久久久久久999| 毛片基地黄久久久久久天堂| 国产日韩成人精品| 久久精品亚洲| 老司机午夜精品| 欧美成人国产va精品日本一级| 欧美成人四级电影| 亚洲精品视频一区| 亚洲婷婷免费| 久久国产一区二区| 欧美大尺度在线观看| 欧美三级第一页| 国产午夜精品久久久久久免费视| 狠狠色伊人亚洲综合成人| 亚洲国产第一页| 中国成人亚色综合网站| 久久久久中文| 日韩视频免费大全中文字幕| 亚洲欧美精品| 欧美大色视频| 国产精品资源| 亚洲国产精品久久久久| 亚洲香蕉在线观看| 久久偷窥视频| av72成人在线| 久久久久一区二区三区| 欧美视频在线观看一区二区| 黄色欧美日韩| 亚洲免费一在线| 欧美电影免费观看| 亚洲欧美精品一区| 欧美激情免费在线| 国产视频久久久久久久| 日韩视频一区二区三区| 久久精品国产2020观看福利| 99国产精品| 免费在线亚洲| 国产主播一区二区三区四区| 夜夜嗨网站十八久久| 欧美成人r级一区二区三区| 亚洲综合社区| 欧美激情精品久久久六区热门| 国模精品一区二区三区色天香| 亚洲视频在线播放| 亚洲国产精品999|