📄 cunchu2.cpp
字号:
#include <iostream.h>
#include <stdlib.h>
struct freeM{int Sadd;
int length;
};
struct busyMEM{int Sadd;
int Eadd;
char fill;
busyMEM *next;
};
class Assign{
public:
void initMEM();
void pai();
void printList();
void resetfree();
void insert();
void Delete();
private:
freeM freeMEM[20];
busyMEM *p;
};
void Assign::initMEM()
{ p=(busyMEM*)malloc(sizeof(busyMEM));
busyMEM *L;
L=p;
L->fill='O';
L->Eadd=19;
L->Sadd=0;
L->next=(busyMEM*)malloc(sizeof(busyMEM));
L=L->next;
L->fill='A';
L->Eadd=51;
L->Sadd=20;
L->next=(busyMEM*)malloc(sizeof(busyMEM));
L=L->next;
L->fill='B';
L->Eadd=71;
L->Sadd=52;
L->next=(busyMEM*)malloc(sizeof(busyMEM));
L=L->next;
L->fill='C';
L->Eadd=137;
L->Sadd=98;
L->next=(busyMEM*)malloc(sizeof(busyMEM));
L=L->next;
L->fill='D';
L->Eadd=169;
L->Sadd=148;
L->next=p;
resetfree();
}
void Assign::resetfree()
{ for(int i=0;i<20;i++)
{ freeMEM[i].length=-1;
freeMEM[i].Sadd=-1;
}
i=0;
busyMEM *L=p;
while(L->next!=p)
{ if(L->next->Sadd-L->Eadd-1!=0)
{ freeMEM[i].length=L->next->Sadd-L->Eadd-1;
freeMEM[i].Sadd=L->Eadd+1;
i++;
}
L=L->next;
}
freeMEM[i].length=256-L->Eadd-1;
freeMEM[i].Sadd=L->Eadd+1;
}
void Assign::printList()
{ cout<<"┌──────┬──┬──┐"<<endl;
cout<<"│分区起始地址│长度│状态│"<<endl;
int i=0;
while(freeMEM[i].length!=-1)
{ if(freeMEM[i].Sadd<100)
{ cout<<"├──────┼──┼──┤"<<endl;
cout<<"│ "<<freeMEM[i].Sadd<<"k │ "<<freeMEM[i].length<<"k│空闲│"<<endl;
}
else
{cout<<"├──────┼──┼──┤"<<endl;
cout<<"│ "<<freeMEM[i].Sadd<<"k │ "<<freeMEM[i].length<<"k│空闲│"<<endl;
}
i++;
}
cout<<"└──────┴──┴──┘"<<endl;
}
void Assign::insert()
{ busyMEM *L;
L=(busyMEM*)malloc(sizeof(busyMEM));
cout<<"请输入作业标识:";
cin>>L->fill;
cout<<"请输入作业长度:";
int a;
cin>>a;
for(int i=0;i<20;i++)
{ if(freeMEM[i].length>=a)
break;
}
if(i==19){ cout<<"分配失败!";
return;
}
busyMEM *R=p;
while(R->next->Eadd<freeMEM[i].Sadd&&R->next!=p)
{ R=R->next;
}
L->next=R->next;
R->next=L;
L->Sadd=freeMEM[i].Sadd;
L->Eadd=freeMEM[i].Sadd+a-1;
resetfree();
}
void Assign::Delete()
{ cout<<"需要回收的进程标号:";
char biao;
cin>>biao;
busyMEM *L=p;
while(L->next->fill!=biao)
{ if(L->next==p)
{ cout<<"未找到指定进程!"<<endl;
return;
}
L=L->next;
}
L->next=L->next->next;
resetfree();
}
void Assign::pai()
{ freeM temp;
int i=0;
int j=0;
while(freeMEM[i].length!=-1)
{ j++; i++;
}
for(;j>=0;j--)
{ i=0;
while(freeMEM[i+1].length!=-1)
{ if(freeMEM[i+1].length>freeMEM[i].length)
{ temp.length=freeMEM[i].length;
temp.Sadd=freeMEM[i].Sadd;
freeMEM[i].length=freeMEM[i+1].length;
freeMEM[i].Sadd=freeMEM[i+1].Sadd;
freeMEM[i+1].length=temp.length;
freeMEM[i+1].Sadd=temp.Sadd;
}
i++;
} }}
void main()
{ Assign Assign;
Assign.initMEM();
cout<<"存储管理--最佳适应算法"<<endl;
cout<<"空闲表的初始状态:"<<endl;
Assign.printList();
while(1)
{ cout<<"请选择操作:"<<endl;
cout<<"1、分配"<<endl;
cout<<"2、释放"<<endl;
cout<<"3、退出"<<endl;
int j;
cin>>j;
if(j==3)
break;
{ Assign.pai();
Assign.insert();
Assign.pai();
Assign.printList();
break;
}
if(j==2)
{ Assign.Delete();
Assign.pai();
Assign.printList();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -