为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消