亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? first.cpp

?? 文件的首次適應算法和最佳適應算法
?? CPP
字號:
#include <iostream> 
#include <stdlib.h> 
#include <time.h> 
using namespace std; 
struct memory 
{ 
struct memory *former; 
int address;//地址 
int num;//作業號 
int size;//分配內存大小 
int state;//狀態0表示空閑1表示已分配 
struct memory *next; 
}; 
typedef struct memory MEMORY; 
MEMORY *mem; 
const int size_min=10;//內存允許的最小空閑塊的大小 
bool is_optimist=false;//判斷是否是最佳適應算法 

void init(); 
void FF(); 
void alloc(MEMORY *,MEMORY *);//首次適應算法分配內存 
void free(MEMORY *);//首次適應算法回收內存 
void sort(MEMORY *);//對內存鏈進行排序 
void insert(MEMORY *,MEMORY *); 
void free_optimist(MEMORY *); 
void print(MEMORY *);//打印內存鏈 
void main() 
{ 
int i=0; 
while(1) 
{ 
cout<<("\nPlease select a number(1,2,0)"); 
cout<<("\n 1--首次適應算法"); 
cout<<"\n 2--最佳適應算法"<<endl; 
cout<<" 0--中止程序"<<endl; 
cin>>i; 

if(i==1) 
{ 
cout<<("\nThis is an example for FF:\n"); 
is_optimist=false; 
init(); 
FF(); 
} 
else if(i==2) 
{ 
cout<<"\nThis is an example for optimist method;\n"; 
is_optimist=true; 
init(); 
FF(); 

} 
else if(i==0) 
{ 
exit(1); 
} 
} 
} 
void init() 
{ 
mem=new MEMORY; 
mem->size=640; 
//mem->state=0; 
mem->former=0; 
mem->next=0; 
} 
void FF()//首次適應算法 
{ 
int i; 
int work[]={130,60,100,200,140,60,50};//作業序列 
//int assignment; 
MEMORY *running; 
for(i=0;i<sizeof(work)/sizeof(int);i++) 
{ 
running=(MEMORY *)malloc(sizeof(MEMORY));//初始化作業 
if(running!=NULL) 
{ 
running->former=NULL; 
running->address=0; 
running->num=i+1; 
running->size=work[i]; 
running->state=0; 
running->next=NULL; 
//cout<<"作業初始化成功"<<running->num<<endl; 
if(is_optimist==true)//最佳適應算法 
{ 
//cout<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"<<endl; 
alloc(mem,running); 
} 
else//首次適應算法 
{ 
alloc(mem,running); 
} 
print(mem); 
cout<<endl; 
} 
else 
cout<<"沒有足夠的內存空間"<<endl; 


if(rand()%3==1) 
{ 
if(is_optimist==false)//首次適應算法 
{ 
free(mem); 
} 
else//最佳適應算法 
{ 
::free_optimist(mem); 
} 
} 
} 
} 
void free(MEMORY *ptr)//作業處理完后釋放內存空間 
{ 
MEMORY *previous,*current; 
previous=ptr; 
current=previous->next; 
while(current!=NULL) 
{ 
if(current->state==1&&rand()%3==1) 
{ 
break; 
} 
previous=current; 
current=current->next; 
} 
if(current==NULL) 
{ 
//cout<<"內存中沒有任何作業!!!"<<endl; 
return; 
} 
else if(current->next==NULL) 
{ 
if(previous->state==0) 
{ 
MEMORY *temp; 
temp=current; 
previous->size=previous->size+current->size; 
previous->next=NULL; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp; 
print(mem); 
} 
else 
{ 
current->state=0; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
print(mem); 
} 
} 
else if((current->next)->next==NULL) 
{ 
if(previous->state==0&&(current->next)->state==0) 
{ 
MEMORY *temp1,*temp2; 
temp1=current; 
temp2=current->next; 
previous->size=previous->size+current->size+(current->next)->size; 
previous->next=NULL; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp1; 
delete temp2; 
print(mem); 
} 
else if(previous->state==0)//釋放的地址空間前面有空閑塊則把它和前面的合并 
{ 
MEMORY *temp; 
temp=current; 
previous->size=previous->size+current->size; 
(current->next)->former=previous; 
previous->next=current->next; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp; 
print(mem); 
} 
else if((current->next)->state==0)//釋放的地址空間后面有空閑塊則把它和后面的空閑塊合并 
{ 
MEMORY *temp; 
temp=current->next; 
current->size=current->size+(current->next)->size; 
current->state=0; 
current->next=NULL; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 

delete temp; 
print(mem); 

} 
else//處理完的作業前后都沒有空閑塊時直接把它的狀態改為沒分配 
{ 
current->state=0; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
print(mem); 
} 

} 
else 
{ 
if(previous->state==0&&(current->next)->state==0) 
{ 
MEMORY *temp1,*temp2; 
temp1=current; 
temp2=current->next; 
previous->size=previous->size+current->size+(current->next)->size; 
((current->next)->next)->former=previous; 
previous->next=(current->next)->next; 

cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp1; 
delete temp2; 
print(mem); 
} 
else if(previous->state==0)//釋放的地址空間前面有空閑塊則把它和前面的合并 
{ 
MEMORY *temp; 
temp=current; 
previous->size=previous->size+current->size; 
(current->next)->former=previous; 
previous->next=current->next; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp; 
print(mem); 
} 
else if((current->next)->state==0)//釋放的地址空間后面有空閑塊則把它和后面的空閑塊合并 
{ 
MEMORY *temp; 
temp=current->next; 
current->size=current->size+(current->next)->size; 
current->state=0; 
((current->next)->next)->former=current; 
current->next=(current->next)->next; 

cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 

delete temp; 
print(mem); 

} 
else//處理完的作業前后都沒有空閑塊時直接把它的狀態改為沒分配 
{ 
current->state=0; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
print(mem); 
} 
} 
} 

void alloc(MEMORY *ptr,MEMORY *assign)//內存分配 
{ 
if(ptr->next==NULL)//內存沒有作業運行 
{ 
if(ptr->size>=assign->size)//內存空間大于作業所需空間 
{ 
ptr->size=ptr->size-assign->size;//為內存分配空間 
assign->state=1; 
ptr->next=assign; 
assign->former=ptr; 

cout<<"作業 "<<(assign->num)<<"申請"<<(assign->size)<<" "<<"k的內存空間"<<endl; 
} 
else 
{ 
cout<<"沒有足夠的內存空間為作業"<<(assign->num)<<"分配"<<endl; 
delete assign; 
} 
} 
else//內存中如果已經分配了空間 
{ 
MEMORY *previous,*current; 
previous=ptr; 
current=previous->next; 
while(current!=NULL) 
{ 
if(current->size>assign->size&current->state==0)//如果當前內存空間大于作業所需空間并且內存沒有被分配 
{ 
break; 
} 
previous=current; 
current=current->next; 
} 

if(current==NULL)//空閑鏈中沒有為作業分配所需的空間 
{ 

if(ptr->size>=assign->size)//內存中還有足夠沒分配的空間為此作業分配 
{ 
assign->address =640-(ptr->size);//max+size_offset;//作業在內存中的首地址 
ptr->size=ptr->size-assign->size; 
assign->state=1; 
assign->former=previous; 
previous->next=assign; 


cout<<"作業 "<<(assign->num)<<"申請"<<(assign->size)<<" "<<"k的內存空間"<<endl; 
} 
else 
{ 
cout<<"沒有足夠的內存空間為作業"<<(assign->num)<<"分配"<<endl; 
} 
} 
else//空閑鏈中有可為此作業分配的空間 
{ 

if((current->size-assign->size)<=size_min)//空閑鏈所具備的空間與作業所需空間大小差不多時 
{ //直接把整個空閑塊的空間分配給作業否則從空閑塊中 
current->num=assign->num; //劃出與作業等同的空間 
current->state=1; 
delete assign;//free(assign); 

cout<<"作業 "<<(current->num)<<"申請"<<(current->size)<<" "<<"k的內存間"<<endl; 
} 
else//從空閑塊中劃分一塊與作業大小等同的空間 
{ 
current->size=current->size-assign->size; 
assign->state=1; 
assign->address=current->address+current->size; 

if(current->next==NULL)//此要分配的空間是空閑鏈的最后一個元素 
{ 
assign->former=current; 
current->next=assign; 
} 
else 
{ 
assign->next=current->next; 
(current->next)->former=assign; 
assign->former=current; 
current->next=assign; 
} 
cout<<"作業 "<<(assign->num)<<"申請"<<(assign->size)<<" "<<"k的內存空間"<<endl; 
} 
} 

} 

if((ptr->next)->next!=NULL&&is_optimist==true) 
sort(ptr);//排序由空閑塊從小到大 
//print(ptr); 

} 
void sort(MEMORY *ptr) 
{ 
MEMORY *temp=new MEMORY; 
temp->next=0; 
temp->former=0; 

while(ptr->next) 
{ 
if((ptr->next)->next==NULL)//內存鏈中只有兩個元素 
{ 
MEMORY *p; 
p=ptr->next; 
ptr->next=NULL; 
insert(temp,p); 
} 
else//內存鏈中有多個元素 
{ 
MEMORY *p; 
p=ptr->next; 
p->former=ptr; 
ptr->next=p->next; 
(p->next)->former=ptr; 
insert(temp,p); 
} 

} 
ptr->next=temp->next; 
(temp->next)->former=ptr; 
delete temp; 
} 
void insert(MEMORY *queue,MEMORY *item) 
{ 
MEMORY *previous,*current; 
previous=queue; 
current=previous->next; 
while(current!=NULL && item->size>=current->size) 
{ 
previous=current; 
current=current->next; 
} 

if(previous==queue)//所要插入的元素最小 
{ 

if(queue->next==NULL)//內存鏈中只有一個元素 
{ 
item->next=0; 
queue->next=item; 
item->former=queue; 
} 
else//內存鏈中有多個元素 
{ 
item->next=queue->next; 
(queue->next)->former=item; 
item->former=queue; 
queue->next=item; 
} 
} 
else//定位到要插入的元素 
{ 
item->next=current; 
item->former=previous; 
if(current==NULL) 
{ 
previous->next=item; 
} 
else 
{ 
current->former=item; 
previous->next=item; 
} 

} 
} 
void free_optimist(MEMORY *ptr) 
{ 
MEMORY *previous,*current; 
previous=ptr; 
current=previous->next; 
while(current!=NULL) 
{ 
if(current->state==1&&rand()%3==1) 
{ 
break; 
} 
previous=current; 
current=current->next; 
} 
if(current==NULL) 
{ 
//cout<<"內存中沒有任何作業!!!"<<endl; 
return; 
} 
else if(current->next==NULL) 
{ 
if(previous->state==0&&((previous->address+previous->size)==current->address)) 
{ 
MEMORY *temp; 
temp=current; 
previous->size=previous->size+current->size; 
previous->next=NULL; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp; 
print(mem); 
} 
else 
{ 
current->state=0; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
print(mem); 
} 
} 
else if((current->next)->next==NULL) 
{ 
if(previous->state==0&&(current->next)->state==0&&((previous->address+previous->size)==current->address)&&((current->size+current->address)==(current->next)->address)) 
{ 
MEMORY *temp1,*temp2; 
temp1=current; 
temp2=current->next; 
previous->size=previous->size+current->size+(current->next)->size; 
previous->next=NULL; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp1; 
delete temp2; 
print(mem); 
} 
else if(previous->state==0&&((previous->address+previous->size)==current->address))//釋放的地址空間前面有空閑塊則把它和前面的合并 
{ 
MEMORY *temp; 
temp=current; 
previous->size=previous->size+current->size; 
(current->next)->former=previous; 
previous->next=current->next; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp; 
print(mem); 
} 
else if((current->next)->state==0&&((current->size+current->address)==(current->next)->address))//釋放的地址空間后面有空閑塊則把它和后面的空閑塊合并 
{ 
MEMORY *temp; 
temp=current->next; 
current->size=current->size+(current->next)->size; 
current->state=0; 
current->next=NULL; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 

delete temp; 
print(mem); 
} 
} 
else 
{ 
if(previous->state==0&&(current->next)->state==0&&((previous->address+previous->size)==current->address)&&((current->size+current->address)==(current->next)->address)) 
{ 
MEMORY *temp1,*temp2; 
temp1=current; 
temp2=current->next; 
previous->size=previous->size+current->size+(current->next)->size; 
((current->next)->next)->former=previous; 
previous->next=(current->next)->next; 

cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp1; 
delete temp2; 
print(mem); 
} 
else if(previous->state==0&&(previous->address+previous->size)==current->address)//釋放的地址空間前面有空閑塊則把它和前面的合并 
{ 
MEMORY *temp; 
temp=current; 
previous->size=previous->size+current->size; 
previous->state=0; 
(current->next)->former=previous; 
previous->next=current->next; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
delete temp; 
print(mem); 
} 
else if((current->next)->state==0&&((current->size+current->address)==(current->next)->address))//釋放的地址空間后面有空閑塊則把它和后面的空閑塊合并 
{ 
MEMORY *temp; 
temp=current->next; 
current->size=current->size+(current->next)->size; 
current->state=0; 
((current->next)->next)->former=current; 
current->next=(current->next)->next; 

cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 

delete temp; 
print(mem); 

} 
else//處理完的作業前后都沒有空閑塊時直接把它的狀態改為沒分配 
{ 
current->state=0; 
cout<<"作業 "<<(current->num)<<"釋放 "<<(current->size)<<"k 的空間"<<endl; 
print(mem); 
} 
} 
if((ptr->next)->next!=NULL) 
sort(ptr);//排序由空閑塊從小到大 
} 
void print(MEMORY *ptr) 
{ 
MEMORY *temp; 
temp=ptr->next; 
cout<<"\n內存鏈的狀態為:"<<endl; 
while(temp!=NULL) 
{ 
cout<<"分配的地址為:"<<temp->address<<" 分配的空間:"<<temp->size<<"k" 
<<" 運行的作業號:"<<temp->num; 
if(temp->state==0) 
{ 
cout<<" 內存空閑"; 
} 
else 
{ 
cout<<" 內存已分配"; 
} 
cout<<endl; 
temp=temp->next; 
} 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品免费在线| 国产精品伦一区二区三级视频| 午夜久久福利影院| 欧美日韩精品三区| 蜜桃视频一区二区| 国产日韩欧美一区二区三区综合| 成人手机电影网| 一区二区三区四区视频精品免费| 欧美特级限制片免费在线观看| 日欧美一区二区| 久久久一区二区| 粉嫩嫩av羞羞动漫久久久| 亚洲欧美综合另类在线卡通| 91免费版pro下载短视频| 一区二区三区欧美久久| 日韩欧美你懂的| 成人丝袜高跟foot| 亚洲一区二区偷拍精品| 日韩三级在线免费观看| 国产河南妇女毛片精品久久久| 国产精品成人免费| 在线精品国精品国产尤物884a| 日韩不卡一区二区三区| 国产女同性恋一区二区| 欧美网站一区二区| 国产在线精品不卡| 亚洲欧美偷拍卡通变态| 91精品国产综合久久精品app| 国产成人夜色高潮福利影视| 亚洲精品中文在线| 欧美www视频| 色噜噜狠狠色综合中国| 激情偷乱视频一区二区三区| 亚洲精品国产第一综合99久久| 欧美精品777| 国产一区二区视频在线| 亚洲精品视频在线看| 日韩免费视频一区二区| 91美女视频网站| 国产尤物一区二区在线| 亚洲二区在线视频| 日本一区二区三区国色天香| 欧美人体做爰大胆视频| 国产精品一品视频| 青青草成人在线观看| 最新中文字幕一区二区三区 | 亚洲综合色丁香婷婷六月图片| 91.com在线观看| 成人在线视频一区| 韩国成人福利片在线播放| 亚洲图片欧美一区| 亚洲欧洲精品一区二区精品久久久 | 制服丝袜亚洲精品中文字幕| 成人动漫av在线| 国产美女精品人人做人人爽| 性做久久久久久久免费看| 欧美国产禁国产网站cc| 欧美成人伊人久久综合网| 欧美日本一道本| 99v久久综合狠狠综合久久| 国产麻豆精品theporn| 捆绑紧缚一区二区三区视频| 亚洲免费观看高清完整版在线 | 裸体一区二区三区| 亚洲电影欧美电影有声小说| 一区二区三区免费观看| 综合中文字幕亚洲| 国产精品久久久一本精品| 精品欧美一区二区在线观看| 欧美久久久久免费| 91久久香蕉国产日韩欧美9色| av成人老司机| caoporen国产精品视频| 东方aⅴ免费观看久久av| 国产一区视频在线看| 另类小说综合欧美亚洲| 久久精品72免费观看| 麻豆91精品91久久久的内涵| 久88久久88久久久| 久久精品国产久精国产爱| 国内精品嫩模私拍在线| 国产成人午夜高潮毛片| 成人性生交大合| 99久久精品免费观看| 丁香啪啪综合成人亚洲小说| 成人av免费在线播放| 91免费观看在线| 欧美吻胸吃奶大尺度电影| 久久久久国产精品厨房| 久久夜色精品国产欧美乱极品| 26uuu国产日韩综合| 久久综合av免费| 日本一区二区高清| 中文字幕一区免费在线观看| 亚洲精品高清在线| 日本一道高清亚洲日美韩| 寂寞少妇一区二区三区| 丁香激情综合国产| 在线观看精品一区| 精品人伦一区二区色婷婷| 国产精品毛片高清在线完整版| 中文字幕日本乱码精品影院| 亚洲午夜电影在线| 精品一区二区三区在线播放 | 日本久久电影网| 91精品国产品国语在线不卡| 2021国产精品久久精品| 国产精品久久久久久久久免费丝袜 | 欧美日韩一区二区三区不卡| 日韩一区二区三区视频| 中文字幕成人av| 性做久久久久久| 高清beeg欧美| 色婷婷久久99综合精品jk白丝| 欧美一区二区三区四区视频| 精品精品国产高清一毛片一天堂| 国产精品福利一区二区| 日韩精品视频网| 99久久精品免费| 91精品福利在线一区二区三区 | 色88888久久久久久影院按摩| 欧美一卡二卡在线观看| 国产精品夫妻自拍| 青青草国产成人99久久| 一本大道久久a久久精品综合| 精品剧情在线观看| 亚洲一区在线观看免费| 国产成人免费视频网站高清观看视频 | 欧美精品粉嫩高潮一区二区| 国产无人区一区二区三区| 亚洲1区2区3区视频| 国产白丝精品91爽爽久久| 日韩一区二区视频| 一区二区三区产品免费精品久久75 | 国产三级精品三级| 青娱乐精品视频| 欧美无乱码久久久免费午夜一区| 国产日韩欧美一区二区三区乱码| 午夜国产精品一区| 色婷婷狠狠综合| 国产精品卡一卡二| 精品系列免费在线观看| 7777精品伊人久久久大香线蕉 | 国产欧美一区视频| 免费的成人av| 宅男在线国产精品| 亚洲欧美日韩国产中文在线| 国产成人啪午夜精品网站男同| 这里是久久伊人| 亚洲成人免费在线观看| 色成人在线视频| 最新久久zyz资源站| 国产福利一区二区三区在线视频| 日韩精品一区二区三区蜜臀| 视频一区在线播放| 在线电影一区二区三区| 亚洲国产视频直播| 欧美综合欧美视频| 亚洲精品福利视频网站| 日本高清成人免费播放| 一区二区三区四区国产精品| 色婷婷综合久久久| 一区二区三区在线观看视频| 欧美在线色视频| 亚洲在线观看免费视频| 欧美亚一区二区| 午夜精品爽啪视频| 欧美一级专区免费大片| 日本va欧美va精品发布| 日韩三级伦理片妻子的秘密按摩| 丝袜美腿亚洲一区二区图片| 欧美精品久久久久久久多人混战| 婷婷久久综合九色综合伊人色| 91精选在线观看| 捆绑变态av一区二区三区| 久久久亚洲精品石原莉奈| 国产乱码精品一区二区三区av| 久久青草国产手机看片福利盒子 | 日韩免费视频线观看| 国产一区二区精品在线观看| 国产日韩综合av| 91免费观看在线| 日韩电影在线看| 久久亚洲春色中文字幕久久久| 国产精品99精品久久免费| 国产精品成人一区二区艾草| 欧洲视频一区二区| 免费成人小视频| 欧美经典一区二区| 色拍拍在线精品视频8848| 亚洲v中文字幕| 精品国产免费久久| 99久久婷婷国产精品综合| 亚洲高清免费观看高清完整版在线观看| 欧美午夜寂寞影院| 国产精品一区三区| 亚洲欧美日韩在线| 欧美成人伊人久久综合网| 99久久精品国产导航| 日本欧美韩国一区三区|