栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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的原创作品,如需转载,请注明出处,否则将追究法律责任


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号