二可变分区Word格式.docx

上传人:b****5 文档编号:16329225 上传时间:2022-11-22 格式:DOCX 页数:9 大小:16.61KB
下载 相关 举报
二可变分区Word格式.docx_第1页
第1页 / 共9页
二可变分区Word格式.docx_第2页
第2页 / 共9页
二可变分区Word格式.docx_第3页
第3页 / 共9页
二可变分区Word格式.docx_第4页
第4页 / 共9页
二可变分区Word格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

二可变分区Word格式.docx

《二可变分区Word格式.docx》由会员分享,可在线阅读,更多相关《二可变分区Word格式.docx(9页珍藏版)》请在冰豆网上搜索。

二可变分区Word格式.docx

sony006@

*/

#include<

stdio.h>

iostream.h>

string.h>

iomanip.h>

constintMAXJOB=100;

//定义表最大记录数

typedefstructnode{

intstart;

intlength;

chartag[20];

}job;

jobfrees[MAXJOB];

//定义空闲区表

intfree_quantity;

joboccupys[MAXJOB];

//定义已分配区表

intoccupy_quantity;

//初始化函数

voidinitial()

{

inti;

for(i=0;

i<

MAXJOB;

i++){

frees[i].start=-1;

frees[i].length=0;

strcpy(frees[i].tag,"

free"

);

occupys[i].start=-1;

occupys[i].length=0;

strcpy(occupys[i].tag,"

"

}

free_quantity=0;

occupy_quantity=0;

//读数据函数

intreadData()

FILE*fp;

charfname[20];

cout<

<

请输入初始空闲表文件名:

;

cin>

>

fname;

if((fp=fopen(fname,"

r"

))==NULL){

错误,文件打不开,请检查文件名"

endl;

else{

while(!

feof(fp)){

fscanf(fp,"

%d,%d"

&

frees[free_quantity].start,&

frees[free_quantity].length);

free_quantity++;

return1;

return0;

//sort

voidsort()

inti,j,p;

free_quantity-1;

p=i;

for(j=i+1;

j<

free_quantity;

j++){

if(frees[j].start<

frees[p].start){

p=j;

if(p!

=i){

frees[free_quantity]=frees[i];

frees[i]=frees[p];

frees[p]=frees[free_quantity];

//显示函数

voidview()

endl<

----------------------------------------------------------"

当前空闲表:

起始地址长度状态"

cout.setf

(2);

cout.width(12);

frees[i].start;

cout.width(10);

frees[i].length;

cout.width(8);

frees[i].tag<

当前已分配表:

起始地址长度占用作业名"

occupy_quantity;

occupys[i].start;

occupys[i].length;

occupys[i].tag<

//最先适应分配算法

voidearliest()

charjob_name[20];

intjob_length;

inti,j,flag,t;

请输入新申请内存空间的作业名和空间大小:

job_name;

job_length;

flag=0;

if(frees[i].length>

=job_length){

flag=1;

if(flag==0){

Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试"

t=0;

i=0;

while(t==0){

t=1;

i++;

i--;

occupys[occupy_quantity].start=frees[i].start;

strcpy(occupys[occupy_quantity].tag,job_name);

occupys[occupy_quantity].length=job_length;

occupy_quantity++;

job_length){

frees[i].start+=job_length;

frees[i].length-=job_length;

for(j=i;

frees[j]=frees[j+1];

free_quantity--;

内存空间成功:

)"

//最优适应分配算法

voidexcellent()

for(j=0;

if((frees[j].length>

=job_length)&

&

(frees[j].length<

frees[i].length)){

i=j;

//最坏适应算法

voidworst()

(frees[j].length>

//撤消作业

voidfinished()

inti,j,flag,p=0;

请输入要撤消的作业名:

flag=-1;

if(!

strcmp(occupys[i].tag,job_name)){

flag=i;

start=occupys[i].start;

length=occupys[i].length;

if(flag==-1){

没有这个作业名"

//加入空闲表

if((frees[i].start+frees[i].length)==start){

if(((i+1)<

free_quantity)&

(frees[i+1].start==start+length)){

frees[i].length=frees[i].length+frees[i+1].length+length;

p=1;

frees[i].length+=length;

if(frees[i].start==(start+length)){

frees[i].start=start;

if(p==0){

frees[free_quantity].start=start;

frees[free_quantity].length=length;

//删除分配表中的该作业

for(i=flag;

occupys[i]=occupys[i+1];

occupy_quantity--;

voidmain()

intflag=0;

intt=1;

intchioce=0;

version();

initial();

flag=readData();

while(flag==1){

sort();

========================================================="

可变分区存储管理模拟系统"

1.申请空间2.撤消作业3.显示空闲表和分配表0.退出"

请选择:

chioce;

switch(chioce){

case1:

//换算法请换下一句调用

earliest();

break;

case2:

finished();

case3:

view();

case0:

default:

选择错误!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1