内存分配,360笔试
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void newOper(vector<int> &mem, int num){
//判断是否有连续num个空间
int s = 0, t = 0;
bool put = false;
for (int i = 0; i < mem.size(); ++i) {
if (mem[i] == 0)
++t;
else{
s = i+1;
if (s > mem.size())
break;
t = 0;
}
if (t >= num) {
put = true;
break;
}
}
if (put) {
++handle;
for (int i = s; i < s+t; ++i)
mem[i] = handle;
cout << handle << endl;
} else
cout << "NULL" << endl;
}
void delOper(vector<int> &mem, int num){
//判断是否有连续num个空间
bool DEL = false;
for (int i = 0; i < mem.size(); ++i) {
if (mem[i] == num) {
if (!DEL)
DEL = true;
mem[i] = 0;
}
}
if (!DEL)
cout << "ILLEGAL_OPERATION" << endl;
}
void defOper(vector<int> &mem){
int head = 0, tail = 0;
while (tail != mem.size()) {
if (mem[tail] == 0)
++tail;
else {
mem[head++] = mem[tail++];
}
}
}
int main()
{
int T, MaxMem;
static int handle;
//输入
cin >> T >> MaxMem;
vector<string> oper(T);
string line;
cin.get();
for (int i = 0; i < T; ++i) {
getline(cin, oper[i]);
}
//处理并输出
vector<int> mem(MaxMem, 0);
for(int i = 0; i < T; ++i) {
if (oper[i][0] == 'n') {
int num = oper[i][4] - '0';
newOper(mem, num);
}
if (oper[i][0] == 'd' && oper[i][2] == 'l') {
int num = oper[i][4] - '0';
delOper(mem, num);
}
if (oper[i][0] == 'd' && oper[i][2] == 'f') {
int num = oper[i][4] - '0';
defOper(mem);
}
}
return 0;
}