收藏 分销(赏)

首次适应算法和最佳适应算法-C++语言版.doc

上传人:精*** 文档编号:1578250 上传时间:2024-05-05 格式:DOC 页数:6 大小:30.04KB
下载 相关 举报
首次适应算法和最佳适应算法-C++语言版.doc_第1页
第1页 / 共6页
首次适应算法和最佳适应算法-C++语言版.doc_第2页
第2页 / 共6页
首次适应算法和最佳适应算法-C++语言版.doc_第3页
第3页 / 共6页
首次适应算法和最佳适应算法-C++语言版.doc_第4页
第4页 / 共6页
首次适应算法和最佳适应算法-C++语言版.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、#include#includeusing namespace std;#define Free 0 /空闲状态#define Busy 1 /已用状态#define OK 1 /完成#define ERROR 0 /出错#define MAX_length 512 /最大内存空间为512KBtypedef int Status;int flag;typedef struct freearea/定义一个空闲区说明表结构 long size; /分区大小 long address; /分区地址 int state; /状态ElemType;/ 线性表的双向链表存储结构typedef struct

2、 DuLNode ElemType data; struct DuLNode *prior; /前趋指针 struct DuLNode *next; /后继指针DuLNode,*DuLinkList;DuLinkList block_first; /头结点DuLinkList block_last; /尾结点Status alloc(int);/内存分配Status free(int); /内存回收Status First_fit(int);/首次适应算法Status Best_fit(int); /最佳适应算法void show();/查看分配Status Initblock();/开创空间

3、表Status Initblock()/开创带头结点的内存空间链表 block_first=(DuLinkList)malloc(sizeof(DuLNode); block_last=(DuLinkList)malloc(sizeof(DuLNode); block_first-prior=NULL; block_first-next=block_last; block_last-prior=block_first; block_last-next=NULL; block_last-data.address=0; block_last-data.size=MAX_length; block_

4、last-data.state=Free; return OK;/分配主存Status alloc(int ch) int request = 0; coutrequest; if(request0 |request=0) cout分配大小不合适,请重试!endl; return ERROR; if(ch=2) /选择最佳适应算法 if(Best_fit(request)=OK) cout分配成功!endl; else cout内存不足,分配失败!endl; return OK; else /默认首次适应算法 if(First_fit(request)=OK) cout分配成功!endl; e

5、lse cout内存不足,分配失败!data.size=request; temp-data.state=Busy; DuLNode *p=block_first-next; while(p) if(p-data.state=Free & p-data.size=request) /有大小恰好合适的空闲块 p-data.state=Busy; return OK; break; if(p-data.state=Free & p-data.sizerequest) /有空闲块能满足需求且有剩余 temp-prior=p-prior; temp-next=p; temp-data.address=

6、p-data.address; p-prior-next=temp; p-prior=temp; p-data.address=temp-data.address+temp-data.size; p-data.size-=request; return OK; break; p=p-next; return ERROR;/最佳适应算法Status Best_fit(int request) int ch; /记录最小剩余空间 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode); temp-data.size=request; temp-data

7、.state=Busy; DuLNode *p=block_first-next; DuLNode *q=NULL; /记录最佳插入位置 while(p) /初始化最小空间和最佳位置 if(p-data.state=Free & (p-data.size=request) ) if(q=NULL)q=p;ch=p-data.size-request;else if(q-data.size p-data.size)q=p;ch=p-data.size-request; p=p-next; if(q=NULL) return ERROR;/没有找到空闲块 else if(q-data.size=r

8、equest) q-data.state=Busy; return OK; else temp-prior=q-prior; temp-next=q; temp-data.address=q-data.address; q-prior-next=temp; q-prior=temp; q-data.address+=request; q-data.size=ch; return OK; return OK;/主存回收Status free(int flag) DuLNode *p=block_first;for(int i= 0; i next;elsereturn ERROR;p-data.

9、state=Free; if(p-prior!=block_first & p-prior-data.state=Free)/与前面的空闲块相连 p-prior-data.size+=p-data.size; p-prior-next=p-next; p-next-prior=p-prior;p=p-prior; if(p-next!=block_last & p-next-data.state=Free)/与后面的空闲块相连 p-data.size+=p-next-data.size; p-next-next-prior=p; p-next=p-next-next; if(p-next=bl

10、ock_last & p-next-data.state=Free)/与最后的空闲块相连 p-data.size+=p-next-data.size; p-next=NULL; return OK;/显示主存分配情况void show()int flag = 0; coutn主存分配情况:n; coutnext;cout分区号t起始地址t分区大小t状态nn; while(p) cout flag+t; cout data.addresstt; cout data.sizedata.state=Free) cout空闲nn; else coutnext; cout+nn;/主函数int main

11、() int ch;/算法选择标记 cout请输入所使用的内存分配算法:n; coutch;while(ch2)coutch; Initblock(); /开创空间表 int choice; /操作选择标记 while(1) show();cout请输入您的操作:; coutchoice; if(choice=1) alloc(ch); / 申请内存 else if(choice=2) / 释放回收 int flag; coutflag; free(flag); else if(choice=0) break; /退出 else /输入操作有误 cout输入有误,请重试!endl; continue;

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服