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

转载于:https://blog.51cto.com/14142860/2333704

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值