最佳适应算法增加空闲区说明的代码:
```
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 1024
struct block {
int size; // 内存块大小
int start; // 内存块起始地址
int end; // 内存块结束地址
};
void print_mem(struct block mem[], int n)
{
printf("当前内存分配情况:\n");
for (int i = 0; i < n; i++) {
printf("[%d, %d]区间大小为%d\n", mem[i].start, mem[i].end, mem[i].size);
}
}
int main()
{
int mem_size, n, i, j, min, flag, size;
struct block mem[MAX_SIZE];
printf("请输入内存大小:");
scanf("%d", &mem_size);
mem[0].size = mem_size;
mem[0].start = 0;
mem[0].end = mem_size - 1;
printf("请输入作业数量:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
printf("请输入作业%d的大小:", i);
scanf("%d", &size);
flag = 0; // 标记是否找到了空闲块
min = mem_size + 1; // 最小空闲块大小初始化为内存大小+1
for (j = 0; j <= i - 1; j++) {
if (mem[j].size >= size && mem[j].size < min) {
min = mem[j].size;
flag = 1;
}
}
if (flag) {
printf("作业%d放置到了[%d, %d]区间\n", i, mem[j].start, mem[j].start + size - 1);
mem[j].size -= size;
mem[j].start += size;
// 增加空闲区说明的代码
if (mem[j].size > 0) {
printf("空闲区[%d, %d]大小为%d\n", mem[j].start, mem[j].end, mem[j].size);
}
for (int k = j + 1; k <= i - 1; k++) {
mem[k - 1] = mem[k];
}
mem[i - 1].size = 0; // 将最后一个内存块的大小清零
}
else {
printf("作业%d无法放置\n", i);
}
// 打印当前内存分配情况
print_mem(mem, i);
}
return 0;
}
```
最坏适应算法增加空闲区说明的代码:
```
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 1024
struct block {
int size; // 内存块大小
int start; // 内存块起始地址
int end; // 内存块结束地址
};
void print_mem(struct block mem[], int n)
{
printf("当前内存分配情况:\n");
for (int i = 0; i < n; i++) {
printf("[%d, %d]区间大小为%d\n", mem[i].start, mem[i].end, mem[i].size);
}
}
int main()
{
int mem_size, n, i, j, max, flag, size;
struct block mem[MAX_SIZE];
printf("请输入内存大小:");
scanf("%d", &mem_size);
mem[0].size = mem_size;
mem[0].start = 0;
mem[0].end = mem_size - 1;
printf("请输入作业数量:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
printf("请输入作业%d的大小:", i);
scanf("%d", &size);
flag = 0; // 标记是否找到了空闲块
max = -1; // 最大空闲块大小初始化为-1
for (j = 0; j <= i - 1; j++) {
if (mem[j].size >= size && mem[j].size > max) {
max = mem[j].size;
flag = 1;
}
}
if (flag) {
printf("作业%d放置到了[%d, %d]区间\n", i, mem[j].start, mem[j].start + size - 1);
mem[j].size -= size;
mem[j].start += size;
// 增加空闲区说明的代码
if (mem[j].size > 0) {
printf("空闲区[%d, %d]大小为%d\n", mem[j].start, mem[j].end, mem[j].size);
}
for (int k = j + 1; k <= i - 1; k++) {
mem[k - 1] = mem[k];
}
mem[i - 1].size = 0; // 将最后一个内存块的大小清零
}
else {
printf("作业%d无法放置\n", i);
}
// 打印当前内存分配情况
print_mem(mem, i);
}
return 0;
}
```