博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++算法之线性结构处理的代码
阅读量:6183 次
发布时间:2019-06-21

本文共 2313 字,大约阅读时间需要 7 分钟。

把内容过程中比较好的一些内容段做个珍藏,下边内容是关于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

你可能感兴趣的文章
网络地址转换(NAT)的配置
查看>>
阿里云配置mysql远程连接
查看>>
分页原理
查看>>
我的友情链接
查看>>
Android 自定义系统菜单的背景源码
查看>>
weblogic部署
查看>>
虚拟机环境下安装ESX不能安装虚拟系统解决方案
查看>>
Symfony2 FOS Comment Bundle error
查看>>
SIP 取消一个请求(Cancel)
查看>>
ArrayList和LinkedList的主要区别
查看>>
eclipse如何修改dynamic web module version
查看>>
解决由于内外网导致的无法访问dubbo上面的服务
查看>>
我的友情链接
查看>>
活动目录服务器
查看>>
推荐系统实验方法
查看>>
WiFi安全测试工具、蹭网利器 – WiFiPhisher
查看>>
前往印度班加罗尔大学
查看>>
eix用法詳解
查看>>
AngularJS分别RequireJS做文件合并压缩的那些坑
查看>>
外网访问内网Jetty
查看>>