模擬動態內存管理,初始 100 單位空閒塊。支援命令:
Create pid size:最佳適配分配(找≥size 的最小空閒塊,分配在其首部)Delete pid:釋放進程佔用塊,合併相鄰空閒塊Print:順序輸出內存表(P pid size / H size)End:結束當前測試用例每塊:{id, type, size},type='P'/'H'。向量順序即物理順序。操作:
H,檢查前後相鄰是否為 H,合併size ≥ need 且 size 最小 的(同尺寸取最先)H 則合併(注意向量迭代器失效)End 分隔用例,T 組數據
struct Block { int id; char type; int size; };
vector mem;
void create(int pid, int sz) {
int bestIdx = -1, bestSize = 1e9;
for (int i=0; i= sz && mem[i].size < bestSize)
bestSize = mem[i].size, bestIdx = i;
if (bestIdx == -1) { puts("No enough memory!"); return; }
Block proc = {pid, 'P', sz};
mem[bestIdx].size -= sz;
mem.insert(mem.begin()+bestIdx, proc);
if (mem[bestIdx+1].size == 0) mem.erase(mem.begin()+bestIdx+1);
printf("Create process %d of size %d successfully!\n", pid, sz);
}
void deleteProc(int pid) {
for (int i=0; i0 && mem[i-1].type=='H') {
mem[i-1].size += mem[i].size;
mem.erase(mem.begin()+i);
--i;
}
// 合併後繼
if (i+1