91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++算法之線性結構處理的代碼

發布時間:2020-08-10 12:00:09 來源:網絡 閱讀:275 作者:redsunn 欄目:編程語言

把內容過程中比較好的一些內容段做個珍藏,下邊內容是關于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類型的內存分配形式,每次分配和釋放的時候都檢查內存是否越界、是否沒有成對運行,注意需要添加對應的判斷函數

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒙城县| 阳高县| 闻喜县| 合川市| 南木林县| 巧家县| 全州县| 永嘉县| 陵川县| 台南市| 彭州市| 宝坻区| 昭觉县| 尼勒克县| 屏南县| 黎平县| 新乐市| 兰西县| 云和县| 阿拉善左旗| 海晏县| 内丘县| 日土县| 忻城县| 鱼台县| 黔南| 宜州市| 永修县| 临汾市| 额敏县| 元阳县| 庆元县| 开远市| 建湖县| 航空| 汝城县| 望奎县| 梧州市| 贵德县| 灵宝市| 老河口市|