C++演算法之線性結構處理的程式碼
把內容過程中比較好的一些內容段做個珍藏,下邊內容是關於C++演算法之線性結構處理的內容。
typedef struct _DATA_NODE
{
int num;
}DATA_NODE;
#define STATUS int
#define TRUE 1
#define FALSE 0
b)建立記憶體節點
{
if(0 == number)
return NULL;
assert(NULL != pDataNode);
memset(pDataNode, 0, sizeof(DATA_NODE));
if(NULL == pDataNode->pData){
free(pDataNode);
return NULL;
}
if(NULL == pDataNode->pFlag){
free(pDataNode->pData);
free(pDataNode);
return NULL;
}
memset(pDataNode->pFlag, 0, (number + 7) >> 3);
pDataNode->num = number;
return pDataNode;
}
c)刪除記憶體節點
{
if(NULL == pDataNode)
return FALSE;
assert(NULL != pDataNode ->pData);
assert(NULL != pDataNode-> pFlag);
assert(0 != pDataNode);
free(pDataNode->pFlag);
free(pDataNode->pData);
return TRUE;
}
d)判斷當前是否還有記憶體可以分配
{
int number = pDataNode->num;
unsigned char flag = 0;
int loop = 1;
while(loop <= number){
flag = pFlag[(loop + 7) >> 3 - 1] & (0x1 << ((loop + 7) % 8));
if(0 != flag){
return loop;
}
loop ++;
}
return -1;
}
e)分配記憶體空間
{
int pos;
if(NULL == pDataNode)
return NULL;
if(-1 == (pos = check_if_data_exist(pDataNode)))
return NULL;
pDataNode->pFlag[(pos + 7) >> 3 - 1] |= 0x1 << ((pos + 7)% 8);
return pDataNode->pData + (pos - 1);
}
f)回收記憶體空間
{
int pos = 0;
if(NULL == pDataNode || NULL == pData)
return FALSE;
if(pData < pDataNode->pData || pData > (pDataNode->pData + pDataNode->num))
return FALSE;
pos = (pData - pDataNode->pData) >> 3;
pDataNode->pFlag[(pos + 7) -1] &= ~(0x1 << ((pos + 7) % 8));
return TRUE;
}
g)統計當前已經分配了多少DWORD空間
{
int count = 0;
int loop = 1;
char flag = 0;
if(NULL == pDataNode)
return 0;
for(; loop <= pDataNode->num; loop++)
{
flag = pDataNode->pFlag[(loop + 7) >> 3 - 1] & (0x1 << ((loop + 7) % 8));
if(0 == flag){
count ++;
}
}
return count;
}
上面的程式碼只是一個示範,大家可以在這個基礎之上加以改進,比如說:(1)修改成可以自由分配很多記憶體,注意需要同時修改flag的結構型別(2)修改成先到先得的記憶體分配型別(3)修改成最合適空間的記憶體分配型別(4)修改成debug型別的記憶體分配形式,每次分配和釋放的時候都檢查記憶體是否越界、是否沒有成對執行,注意需要新增對應的判斷函式
©著作權歸作者所有:來自51CTO部落格作者redsunn的原創作品,如需轉載,請註明出處,否則將追究法律責任
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2819695/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構與演算法之線性結構資料結構演算法
- Java實現資料結構之線性結構Java資料結構
- 演算法與資料結構1800題 之線性表 (三)演算法資料結構
- 線性表的順序儲存C++程式碼C++
- 資料結構與演算法(三) -- 線性表之雙向連結串列資料結構演算法
- 資料結構與演算法 - 線性表資料結構演算法
- c/c++ 線性表之單向連結串列C++
- C++中的字串編碼處理C++字串編碼
- 線性結構總結
- 線性表之順序儲存結構
- 線性表之鏈式儲存結構
- 資料結構與演算法 | 線性表 —— 連結串列資料結構演算法
- 資料結構與演算法(一):線性表資料結構演算法
- 【資料結構&演算法】04-線性表資料結構演算法
- 資料結構與演算法(二) -- 線性表之單向迴圈連結串列資料結構演算法
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- 【C/C++】訊號處理之sigaction函式的健壯性測試C++函式
- 線性表的順序儲存C++程式碼實現C++
- 演算法與資料結構1800題 之 陣列與線性表(三)演算法資料結構陣列
- 樹形結構處理
- 資料結構:特殊的線性表之 棧 & 佇列資料結構佇列
- 資料結構與演算法-線性表-單連結串列資料結構演算法
- 《奔跑吧 Linux核心》之處理器體系結構Linux
- c/c++ 線性表之雙向迴圈連結串列C++
- c/c++ 線性表之單向迴圈連結串列C++
- 遠端連線錯誤程式碼及處理
- 線性表的結構詳解
- 資料結構基礎學習之線性表資料結構
- 資料結構和演算法(一)線性表實現資料結構演算法
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- SpringBoot之全域性異常處理Spring Boot
- 前端資料結構--線性結構-連結串列前端資料結構
- 小程式程式碼打包處理
- 開心檔之C++ 訊號處理C++
- 開心檔之C++ 前處理器C++
- 線性表的理論知識總結
- JavaScript 的資料結構和演算法 - 連結串列程式碼篇JavaScript資料結構演算法
- MIPS 架構流水線處理器架構