buddy算法实现
来源:互联网 发布:win7 python安装 编辑:程序博客网 时间:2024/05/03 20:53
buddy算法实现
头疼,脖子疼。
#define _CRT_SECURE_NO_WARNINGS /*buddy算法*/#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct _NODE{ int address; //内存地址 int state; //使用状态 int level; //内存块的大小 char name[10]; //内存的名称 struct _NODE *pre; //前一个结构体块 struct _NODE *next; //后一个结构体块}NODE;struct _NODE * all[10]; //默认的十个等级//创建内存块,但是没用到NODE * alloca_node(int value){ NODE* pNODE = NULL; pNODE = (NODE*)malloc(sizeof(NODE)); memset(pNODE, 0, sizeof(NODE)); pNODE->address = -1; pNODE->next = NULL; pNODE->pre = NULL; return pNODE;}/*从头往后删*/void dNODE(NODE **pNODE){ NODE **pNext; if (NULL == pNODE || NULL == *pNODE){ return; } pNext = *pNODE; free(*pNODE); dNODE(pNext);}//插入节点,没用到。int insert_NODE(NODE **ppNODE, int data){ NODE * pNODE; NODE * pIndex; if (NULL == ppNODE){ return -1; } if (NULL == *ppNODE){ pNODE = alloca_node(data); *ppNODE = pNODE; (*ppNODE)->pre = (*ppNODE)->next = NULL; return 1; } pNODE = alloca_node(data); pIndex = *ppNODE; while (NULL != pIndex->next){ pIndex = pIndex->next; } pNODE->pre = pIndex; pNODE->next = pIndex->next; pIndex->next = pNODE; return 1; }/*待定*/int delete_NODE(NODE **ppNODE, int data){ NODE * pNODE; if (NULL == ppNODE || NULL == *ppNODE){ return -1; } } //根据内存块的名称查找到响应的内存块NODE * fNODE(char *name){ int i, j, n, m, k; NODE * tmpNODE; NODE * preNODE; if (name == NULL || strlen(name) == 0){ return NULL; } for (i = 0; i < 10; i++){ tmpNODE = all[i]; while (tmpNODE != NULL){ if (strcmp(tmpNODE->name, name) == 0&&tmpNODE->state==1){ return tmpNODE; } preNODE = tmpNODE; tmpNODE = tmpNODE->next; } } return NULL;}//得到2的幂级数int getMing(int base, int n){ if (n == 0){ return 1; } return base*getMing(base, n - 1);} //分配内存int alloc_big(NODE *ppNODE,int tmpN,char *name){ NODE *tmpNODE1; if (ppNODE == NULL||tmpN>9||tmpN<0){ return 0; } if (ppNODE->state == 1||ppNODE->level<tmpN){ return alloc_big(ppNODE->next, tmpN,name); } if (tmpN==ppNODE->level){ ppNODE->state = 1; strcpy(ppNODE->name, name); return 1; } tmpNODE1 = (NODE*)malloc(sizeof(NODE)); tmpNODE1->pre = ppNODE; tmpNODE1->next = ppNODE->next; tmpNODE1->address = ppNODE->address + getMing(2,ppNODE->level-1); tmpNODE1->state = 0; tmpNODE1->level = ppNODE->level-1; ppNODE->next = tmpNODE1; ppNODE->state = 0; ppNODE->level = ppNODE->level-1; return alloc_big(ppNODE, tmpN,name); }//分配内存int alloc(int size,char*name){ int result = 1; int tmpN ; int n = 0, i; NODE *p = NULL; if (fNODE(name) != NULL){ return -1; } while (size /= 2) n++; n++; tmpN = n; for(;n<10;n++){ if (alloc_big(all[n],tmpN,name) == 1){ return 1; } /*if (all[n]->state == 0&&tmpN==n){ all[n]->state = 1; all[n]->level = n; all[n]->next = NULL; all[n]->pre = NULL; return 1; } else if (all[n]->state == 0){ alloc_big(all[n], tmpN); } else{ } n++;*/ } return 0;} //释放内存void free_all(){ int i, j; NODE * tmpNODE = NULL; NODE * preNODE = NULL; for (i = 0; i < 10; i++){ tmpNODE = all[i]->next; while(tmpNODE!=NULL){ preNODE = tmpNODE; tmpNODE = tmpNODE->next; free(preNODE); } }}//为默认的内存块分配内存void create_All(){ int i; for (i = 0; i < 10; i++){ all[i] = (NODE*)malloc(sizeof(NODE)); }}//打印出所有的内存块的使用情况void print_all(){ int i, j, n, k, m; NODE *tmpNODE; NODE *preNODE; for (i = 0; i < 10; i++){ tmpNODE = all[i]; // while (tmpNODE != NULL&&tmpNODE->state==1){ while (tmpNODE != NULL){ preNODE = tmpNODE; printf("\naddress:%d ;state:%d ;level:%d ;name:%s ;",tmpNODE->address,tmpNODE->state,tmpNODE->level,tmpNODE->name); tmpNODE = tmpNODE->next; printf("\n"); } }}//释放某个节点int free_NODE(char *name){ NODE * tmpNODE=fNODE(name); NODE *preNODE = NULL; NODE *nextNODE = NULL; if (tmpNODE == NULL){ return -1; } tmpNODE->state = 0; while (1){ preNODE = tmpNODE->pre; nextNODE = tmpNODE->next; if (preNODE != NULL&&nextNODE!=NULL&&preNODE->level == tmpNODE->level && preNODE->state == 0){ free(tmpNODE); preNODE->level++; preNODE->next = nextNODE; nextNODE->pre = preNODE; tmpNODE = preNODE; preNODE = tmpNODE->pre; } else if (nextNODE != NULL&&nextNODE->level == tmpNODE->level && nextNODE->state == 0){ tmpNODE->next = nextNODE->next; if (nextNODE->next != NULL){ tmpNODE->next->pre = tmpNODE; } free(nextNODE); tmpNODE->level++; } else{ tmpNODE->state = 0; return 1; } } }void main(){ int i, j, m, n, k,msize=0; char name[10]; for (i = 0; i < 10; i++){ all[i] = (NODE*)malloc(sizeof(NODE)); all[i]->address = getMing(2, i) - 1; all[i]->state = 0; all[i]->next = NULL; all[i]->pre = NULL; strcpy(all[i]->name, ""); all[i]->level = i; } while (1){ printf("请输入要求 1,分配;2,释放;3,结束\n"); memset(name, 0, sizeof(name)); scanf("%d", &n); if (n == 1){ scanf("%d%s", &msize, name); m = alloc(msize, name); if (m==1){ printf("\n分配成功"); } else if (m == -1){ printf("\n名字重复"); } else{ printf("\n分配失败"); } }else if (n == 2){ printf("输入释放名称"); scanf("%s", name); free_NODE(name); } else if (n == 3){ free_all(); return; } print_all(); } free_all(); return 0;}
0 0
- Buddy算法实现
- buddy算法实现
- buddy算法
- Buddy算法
- 再读BUDDY算法
- 伙伴算法(Buddy)
- buddy系统算法
- 伙伴算法 buddy system
- 操作系统 --- Buddy伙伴算法
- buddy内存分配算法
- 内存分配的buddy算法
- 一个程序明白buddy算法
- buddy内存分配算法浅析
- 伙伴算法 (Buddy Algorithm)简单描诉和自己的简单实现
- 内存管理算法--Buddy伙伴算法
- 内存管理算法--Buddy伙伴算法
- 内存管理算法--Buddy伙伴算法
- 内存管理算法--Buddy伙伴算法
- OpenCV学习笔记(二)之最大熵阈值分割
- 记录个人Android Studio安装插件列表
- SIFT特征提取分析
- Java 8 API 设计经验浅析
- HDU 1698 - Just a Hook(线段树区间更新)
- buddy算法实现
- gitosis + apache2 + gitweb搭建git服务器
- 125. Valid Palindrome
- Ubuntu14.04下基于nvidia-docker的Tensorflow深度学习环境搭建
- Linux 文件编程
- 盒模型中的inline和block
- SpringMVC学习系列(6) 之 数据验证
- 博客
- 一个.java源文件包含多个类及内部类的定义?