⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diaodusuanfa.txt

📁 进程调度算法
💻 TXT
字号:
#include<stdio.h> 
#include<iostream.h> 
#include<string.h> 
#include<iomanip.h> 

const int MAXJOB=100;//定义表最大记录数 

typedef struct node{ 
int start; 
int length; 
char tag[20]; 
}job; 

job frees[MAXJOB];//定义空闲区表 
int free_quantity; 

job occupys[MAXJOB];//定义已分配区表 
int occupy_quantity; 

//初始化函数 
void initial(int a) 
{ 
occupys[0].start=20; 
occupys[0].length=32; 
strcpy(occupys[0].tag,"A"); 
occupys[1].start=52; 
occupys[1].length=20; 
strcpy(occupys[1].tag,"B"); 
occupys[2].start=98; 
occupys[2].length=40; 
strcpy(occupys[2].tag,"C"); 
occupys[3].start=148; 
occupys[3].length=22; 
strcpy(occupys[3].tag,"D"); 

if(a==1){ 
frees[0].start=72; 
frees[0].length=26; 
strcpy(frees[0].tag,"free"); 
frees[1].start=138; 
frees[1].length=10; 
strcpy(frees[1].tag,"free"); 
frees[2].start=170; 
frees[2].length=86; 
strcpy(frees[2].tag,"free"); 
free_quantity=3; 
occupy_quantity=4; 
} 

if(a==2){ 
frees[0].start=138; 
frees[0].length=10; 
strcpy(frees[0].tag,"free"); 
frees[1].start=72; 
frees[1].length=20; 
strcpy(frees[1].tag,"free"); 
frees[2].start=170; 
frees[2].length=86; 
strcpy(frees[2].tag,"free"); 
free_quantity=3; 
occupy_quantity=4; 
} 

if(a==3){ 
frees[0].start=170; 
frees[0].length=86; 
strcpy(frees[0].tag,"free"); 
frees[1].start=72; 
frees[1].length=26; 
strcpy(frees[1].tag,"free"); 
frees[2].start=138; 
frees[2].length=10; 
strcpy(frees[2].tag,"free"); 
free_quantity=3; 
occupy_quantity=4;} 
} 
//显示函数 
void view() 
{ 
int i; 

cout<<endl<<"----------------------------------------------------------"<<endl; 
cout<<"当前空闲表:"<<endl; 
cout<<"起始地址 长度 状态"<<endl; 
for(i=0;i<free_quantity;i++){ 
cout.setf(2); 
cout.width(12); 
cout<<frees[i].start; 
cout.width(10); 
cout<<frees[i].length; 
cout.width(8); 
cout<<frees[i].tag<<endl; 
} 

cout<<endl<<"----------------------------------------------------------"<<endl; 
cout<<"当前已分配表:"<<endl; 
cout<<"起始地址 长度 占用作业名"<<endl; 
for(i=0;i<occupy_quantity;i++){ 
cout.setf(2); 
cout.width(12); 
cout<<occupys[i].start; 
cout.width(10); 
cout<<occupys[i].length; 
cout.width(8); 
cout<<occupys[i].tag<<endl; 
} 
} 

//最先适应分配算法 
void earliest() 
{ 
char job_name[20]; 
int job_length; 
int i,j,flag,t; 

cout<<"请输入新申请内存空间的作业名和空间大小:"; 
cin>>job_name; 
cin>>job_length; 

flag=0; 
for(i=0;i<free_quantity;i++){ 
if(frees[i].length>=job_length){ 
flag=1; 
} 
} 
if(flag==0){ 
cout<<endl<<"Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试"<<endl; 
} 
else{ 
t=0; 
i=0; 
while(t==0){ 
if(frees[i].length>=job_length){ 
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++; 

if(frees[i].length>job_length){ 
frees[i].start+=job_length; 
frees[i].length-=job_length; 
} 
else{ 
for(j=i;j<free_quantity-1;j++){ 
frees[j]=frees[j+1]; 
} 
free_quantity--; 
cout<<"内存空间成功:)"<<endl; 
} 
} 
} 
//最优适应分配算法 
void excellent() 
{ 
char job_name[20]; 
int job_length; 
int i,j,flag,t; 

cout<<"请输入新申请内存空间的作业名和空间大小:"; 
cin>>job_name; 
cin>>job_length; 

flag=0; 
for(i=0;i<free_quantity;i++){ 
if(frees[i].length>=job_length){ 
flag=1; 
} 
} 
if(flag==0){ 
cout<<endl<<"Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试"<<endl; 
} 
else{ 
t=0; 
i=0; 
while(t==0){ 
if(frees[i].length>=job_length){ 
t=1; 
} 
i++; 
} 
i--; 
for(j=0;j<free_quantity;j++){ 
if((frees[j].length>=job_length)&&(frees[j].length<frees[i].length)){ 
i=j; 
} 
} 

occupys[occupy_quantity].start=frees[i].start; 
strcpy(occupys[occupy_quantity].tag,job_name); 
occupys[occupy_quantity].length=job_length; 
occupy_quantity++; 

if(frees[i].length>job_length){ 
frees[i].start+=job_length; 
frees[i].length-=job_length; 
} 
else{ 
for(j=i;j<free_quantity-1;j++){ 
frees[j]=frees[j+1]; 
} 
free_quantity--; 
cout<<"内存空间成功:)"<<endl; 
} 
} 
} 

//最坏适应算法 
void worst() 
{ 
char job_name[20]; 
int job_length; 
int i,j,flag,t; 

cout<<"请输入新申请内存空间的作业名和空间大小:"; 
cin>>job_name; 
cin>>job_length; 

flag=0; 
for(i=0;i<free_quantity;i++){ 
if(frees[i].length>=job_length){ 
flag=1; 
} 
} 
if(flag==0){ 
cout<<endl<<"Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试"<<endl; 
} 
else{ 
t=0; 
i=0; 
while(t==0){ 
if(frees[i].length>=job_length){ 
t=1; 
} 
i++; 
} 
i--; 
for(j=0;j<free_quantity;j++){ 
if((frees[j].length>=job_length)&&(frees[j].length>frees[i].length)){ 
i=j; 
} 
} 

occupys[occupy_quantity].start=frees[i].start; 
strcpy(occupys[occupy_quantity].tag,job_name); 
occupys[occupy_quantity].length=job_length; 
occupy_quantity++; 

if(frees[i].length>job_length){ 
frees[i].start+=job_length; 
frees[i].length-=job_length; 
} 
else{ 
for(j=i;j<free_quantity-1;j++){ 
frees[j]=frees[j+1]; 
} 
free_quantity--; 
cout<<"内存空间成功:)"<<endl; 
} 
} 
} 

//撤消作业 
void finished() 
{ 
char job_name[20]; 
int i,j,flag,p=0; 
int start; 
int length; 

cout<<"请输入要撤消的作业名:"; 
cin>>job_name; 

flag=-1; 
for(i=0;i<occupy_quantity;i++){ 
if(!strcmp(occupys[i].tag,job_name)){ 
flag=i; 
start=occupys[i].start; 
length=occupys[i].length; 
} 
} 
if(flag==-1){ 
cout<<"没有这个作业名"<<endl; 
} 
else{ 
//加入空闲表 
for(i=0;i<free_quantity;i++){ 
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; 
for(j=i+1;j<free_quantity;j++){ 
frees[j]=frees[j+1]; 
} 
free_quantity--; 
p=1; 
} 
else{ 
frees[i].length+=length; 
p=1; 
} 
} 
if(frees[i].start==(start+length)){ 
frees[i].start=start; 
frees[i].length+=length; 
p=1; 
} 
} 

if(p==0){ 
frees[free_quantity].start=start; 
frees[free_quantity].length=length; 
free_quantity++; 
} 



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

for(i=flag;i<occupy_quantity;i++){ 
occupys[i]=occupys[i+1]; 
} 
occupy_quantity--; 
} 
} 

void main() 
{ 
int t=1; 
int chioce=0; 
int flag=1; 
int a; 
state: 
cout<<"1.最先适应算法,2.最优适应算法3.最差适应算法"; 
cin>>a; 

initial(a); 

while(flag==1){ 

cout<<endl<<endl<<"========================================================="<<endl; 
cout<<" 可变分区存储管理模拟系统"<<endl; 
cout<<"========================================================="<<endl; 
cout<<" 1.申请空间 2.撤消作业 3.显示空闲表和分配表 0.退出"<<endl; 
cout<<"请选择:"; 
cin>>chioce; 
switch(chioce){ 
case 1: 
 switch(a){ 
 case 1: earliest(); break; 
 case 2: excellent();break; 
 case 3: worst();break;} 
break; 
case 2: 
 finished(); 
break; 
case 3: 
 view(); 
break; 
case 0:   
 goto state; 
break; 
default: 
cout<<"选择错误!"<<endl; 
} 
} 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -