#include<iostream>
#include <vector>
#define MAX 640
using namespace std
;
struct work
{
int id
;
int size
;
};
struct memory
{
int front_number
;
int number
;
int id
;
bool flag
;
int size
;
};
work process1
= { 1,130 };
work process2
= { 2,60 };
work process3
= { 3,100 };
work process4
= { 4,200 };
work process5
= { 5,140 };
work process6
= { 6,60 };
work process7
= { 7,50 };
struct memory M
[2] =
{
{0,0,0,1,0},
{0,MAX
,0,0,MAX
}
};
vector
<memory
> M_queue
;
memory temp
;
int chose
;
void M_merge(int mer_id
)
{
if ((mer_id
< M_queue
.size() - 1) && (M_queue
[mer_id
+ 1].flag
== 0))
{
M_queue
[mer_id
+ 1].size
+= M_queue
[mer_id
].size
;
M_queue
[mer_id
+ 1].front_number
= M_queue
[mer_id
].front_number
;
M_queue
.erase(M_queue
.begin() + mer_id
);
}
if (M_queue
[mer_id
- 1].flag
== 0)
{
M_queue
[mer_id
- 1].size
+= M_queue
[mer_id
].size
;
M_queue
[mer_id
- 1].number
= M_queue
[mer_id
].number
;
M_queue
.erase(M_queue
.begin() + mer_id
);
}
}
void M_print()
{
cout
<< "-----------------------------------" << endl
;
cout
<< "前序号\t序号\t程序ID\t内存大小\t标志" << endl
;
for (int i
= 1; i
< M_queue
.size(); i
++)
cout
<< M_queue
[i
].front_number
<< "\t" << M_queue
[i
].number
<< "\t" << M_queue
[i
].id
<< "\t" << M_queue
[i
].size
<< "\t\t" << M_queue
[i
].flag
<< endl
;
cout
<< "-----------------------------------" << endl
;
cout
<< endl
<< endl
;
}
void alloc(work p1
)
{
if (chose
== 1)
{
for (int i
= 1; i
< M_queue
.size(); i
++)
{
if ((M_queue
[i
].flag
== 0) && p1
.size
< M_queue
[i
].size
)
{
temp
.flag
= 1;
temp
.id
= p1
.id
;
temp
.size
= p1
.size
;
temp
.front_number
= M_queue
[i
].front_number
;
temp
.number
= temp
.front_number
+ temp
.size
;
M_queue
[i
].front_number
= temp
.number
;
M_queue
[i
].size
-= temp
.size
;
M_queue
.insert(M_queue
.begin() + i
, temp
);
break;
}
}
}
else if (chose
== 2)
{
int best_num
= MAX
;
int best_i
;
for (int i
= 1; i
< M_queue
.size(); i
++)
{
if ((M_queue
[i
].flag
== 0) && (M_queue
[i
].size
>= p1
.size
) && (M_queue
[i
].size
<= best_num
))
{
best_num
= M_queue
[i
].size
;
best_i
= i
;
}
}
temp
.flag
= 1;
temp
.id
= p1
.id
;
temp
.size
= p1
.size
;
temp
.front_number
= M_queue
[best_i
].front_number
;
temp
.number
= temp
.front_number
+ temp
.size
;
M_queue
[best_i
].front_number
= temp
.number
;
M_queue
[best_i
].size
-= p1
.size
;
M_queue
.insert(M_queue
.begin() + best_i
, temp
);
}
M_print();
}
void free(work p2
)
{
int id
;
for (int i
= 0; i
< M_queue
.size(); i
++)
{
if (p2
.id
== M_queue
[i
].id
)
{
M_queue
[i
].flag
= 0;
M_queue
[i
].id
= 0;
id
= i
;
break;
}
}
M_merge(id
);
M_print();
}
int main()
{
M_queue
.push_back(M
[0]);
M_queue
.push_back(M
[1]);
cout
<< "初始空闲区"<<endl
;
M_print();
cout
<< "1、首次适应算法\n2、最佳适应算法\n请输入:";
cin
>> chose
;
if (chose
!= 1 && chose
!= 2)
{
cout
<< "error" << endl
;
return 0;
}
cout
<< "alloc(process[1])" << endl
;
alloc(process1
);
cout
<< "alloc(process[2])" << endl
;
alloc(process2
);
cout
<< "alloc(process[3])" << endl
;
alloc(process3
);
cout
<< "free(process[2])" << endl
;
free(process2
);
cout
<< "alloc(process[4])" << endl
;
alloc(process4
);
cout
<< "free(process[3])" << endl
;
free(process3
);
cout
<< "free(process[1])" << endl
;
free(process1
);
cout
<< "alloc(process[5])" << endl
;
alloc(process5
);
cout
<< "alloc(process[6])" << endl
;
alloc(process6
);
cout
<< "alloc(process[7])" << endl
;
alloc(process7
);
cout
<< "free(process[6])" << endl
;
free(process6
);
return 0;
}
首次适应算法
最佳适应算法
转载请注明原文地址:https://ipadbbs.8miu.com/read-48078.html