C/C++知识点之C++算法之线性结构处理的代码
小标 2019-02-19 来源 : 阅读 552 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之C++算法之线性结构处理的代码,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之C++算法之线性结构处理的代码,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/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类型的内存分配形式,每次分配和释放的时候都检查内存是否越界、是否没有成对运行,注意需要添加对应的判断函数

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程