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

隨筆-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 閱讀(2119) 評論(3)  編輯 收藏 引用 所屬分類: 數據結構

評論:
# re: 簡單的堆結構實現 2011-02-16 09:31 | 戰魂小筑
GetEmptyAddr用for也太慢了吧,改成堆棧好些  回復  更多評論
  
# re: 簡單的堆結構實現 2011-02-17 13:20 | 淘寶皇冠店
好  回復  更多評論
  
# re: 簡單的堆結構實現 2013-05-03 15:57 | tb
拿來練手一下  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美r片在线| 久久免费黄色| 一本色道久久精品| 欧美日韩一区二区三区四区五区 | 亚洲在线观看视频网站| 欧美片在线播放| 久久亚洲春色中文字幕| 欧美国产一区二区在线观看| 久久黄色网页| 久久精品官网| 亚洲一区二区三区中文字幕在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲伊人伊色伊影伊综合网| 一区二区日韩| 欧美日韩不卡一区| 久久成人久久爱| 欧美一区二区三区四区在线观看地址 | 亚洲综合导航| 精品福利电影| 在线视频亚洲| 亚洲男女自偷自拍图片另类| 久久五月天婷婷| 欧美大秀在线观看| 国产精品一区免费视频| 久久综合九色九九| 激情久久综艺| 欧美人成在线| 美女国产一区| 噜噜噜久久亚洲精品国产品小说| 国产精品无码专区在线观看| 99视频一区| 欧美国产一区二区| 亚洲激情偷拍| 国产主播一区二区三区| 亚洲伦理网站| 国产视频综合在线| 欧美日韩中文字幕| 久久久精品日韩欧美| 亚洲精品一区在线观看| 亚洲视频成人| 亚洲第一在线综合在线| 久久久人成影片一区二区三区| 亚洲精品乱码久久久久久黑人| 欧美日韩不卡视频| 欧美肥婆在线| 欧美精品一区在线观看| 亚洲欧美日韩另类精品一区二区三区| 久久久99精品免费观看不卡| 亚洲精品女av网站| 欧美在线你懂的| 亚洲韩日在线| 老司机午夜精品视频在线观看| 欧美国产日韩亚洲一区| 久久精品成人一区二区三区| 亚洲欧美视频在线| 久久成人精品电影| 午夜在线成人av| 亚洲高清一二三区| 亚洲日本中文字幕| 老鸭窝91久久精品色噜噜导演| 欧美中文在线观看| 亚洲国产精品一区| 亚洲精品一区二区在线| 欧美日韩国产一区二区三区地区| 亚洲一区二区久久| 欧美二区在线看| 欧美大胆a视频| 亚洲欧美日本国产有色| 久久久久久**毛片大全| 一区免费视频| 午夜日韩视频| 一区二区三区不卡视频在线观看| 亚洲欧美在线免费观看| 伊人久久久大香线蕉综合直播| 欧美午夜视频网站| 99国产精品视频免费观看一公开| 欧美日韩精品| 一区二区三区免费观看| 蜜桃精品一区二区三区| 午夜精品久久久久久久久| 国产精品久线观看视频| 久久精品人人做人人爽| 亚洲卡通欧美制服中文| 亚洲日本中文字幕| 久久精品视频一| 久久精品国产v日韩v亚洲| 欧美成人精品h版在线观看| 亚洲一区999| 久久久精品国产99久久精品芒果| 亚洲精品国偷自产在线99热| 亚洲欧美国产77777| 亚洲精品美女在线观看| 久久丁香综合五月国产三级网站| 一区二区日韩免费看| 香蕉成人啪国产精品视频综合网| 一本一本a久久| 蜜桃av综合| 美女久久网站| 国内精品久久国产| 久久这里有精品15一区二区三区| 久久激情五月丁香伊人| 国产日韩在线不卡| 亚洲欧美日韩精品| 亚洲午夜激情免费视频| 欧美xxx成人| 日韩网站免费观看| 激情综合网激情| 欧美在线999| 噜噜噜噜噜久久久久久91| 欧美www视频| 亚洲黄页一区| 国产精品尤物| 黄色日韩精品| 欧美高清视频一二三区| 欧美日韩国产麻豆| 国产日本欧美一区二区三区| 欧美激情国产精品| 午夜精品亚洲一区二区三区嫩草| 精品成人久久| 欧美在线免费观看| 欧美日韩国产综合在线| 亚洲一区二区三区在线观看视频| 国产伦精品一区二区三区高清 | 欧美黑人国产人伦爽爽爽| 中文日韩在线| 中文精品视频一区二区在线观看| 久久午夜电影网| 亚洲午夜国产成人av电影男同| 国产欧美日韩亚洲| 国产精品成人播放| 国产精品午夜在线观看| 欧美日韩黄视频| 亚洲天堂成人| 亚洲欧美一级二级三级| 亚洲国产专区| 在线看一区二区| 久久久99国产精品免费| 久久精品99国产精品日本| 国产精品一区二区三区乱码 | 久久天天躁夜夜躁狠狠躁2022| 国产精品区一区| 亚洲手机视频| 久久精品国产77777蜜臀| 国产精品视频专区| 午夜欧美视频| 久久人人超碰| 欧美一区二区三区视频| 久久久久久九九九九| 国产日韩欧美三区| 久久久久久亚洲精品中文字幕| 亚洲欧美另类中文字幕| 亚洲日本va午夜在线电影| 欧美成人激情视频免费观看| 最新国产成人在线观看| 亚洲性视频h| 国产一区二区三区在线观看精品 | 日韩亚洲精品在线| 亚洲欧美日韩精品| 国产一区二区久久精品| 久久人人爽国产| 亚洲黄色大片| 午夜精品一区二区三区在线| 久久久人人人| 亚洲午夜av在线| 久久精品天堂| 亚洲国产精品精华液2区45| 欧美激情亚洲综合一区| 亚洲夜晚福利在线观看| 在线一区二区三区做爰视频网站| 亚洲欧美日韩精品在线| 国产一区自拍视频| 欧美国产日韩视频| 亚洲综合不卡| 亚洲国产成人在线| 亚洲欧美日韩区| 激情视频一区二区| 欧美日韩在线精品| 久久手机免费观看| 亚洲午夜精品久久| 欧美成人激情在线| 午夜视频一区| 亚洲免费电影在线观看| 国产日产欧美精品| 欧美激情一二三区| 欧美专区在线观看一区| 亚洲伦理在线观看| 奶水喷射视频一区| 欧美一区2区视频在线观看| 亚洲高清视频在线| 国产亚洲欧美另类中文| 欧美日韩国产精品专区| 久久一日本道色综合久久| 亚洲性感美女99在线| 亚洲国产精品久久久久秋霞蜜臀| 欧美一区高清| 亚洲一区二区三区在线视频| 日韩视频―中文字幕| 91久久精品国产91久久性色| 美日韩精品视频| 欧美在线播放|