温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++算法之线性结构处理的代码

发布时间:2020-08-10 12:00:09 来源:网络 阅读:260 作者: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