#include<iostream>
#include<vector>
#include<string>
using namespace std;
int max = 100;
//分配函数
void alloc(vector<vector<int>> &address,int size) {
	if (size > 100||size==0) {
		cout << "error" << endl;
		return;
	}
//第一种情况,第一次申请内存,直接输出0坐标,将第一段的地址终点设置为size-1
	if (address.size() == 0) {
		address.push_back({ 1,0,size-1 });
		cout << '0'<<endl;
		return;
	}
//第二种情况,向已释放的内存块中分配内存。也就是对地址数组内的内存块搜索,找到未使用的足够大小的内存块。
	for (auto &i : address) {
		if (i[0] != 1&& i[2] - i[1] + 1 >= size) {
				i[0] = 1;
				i[2] += size ;
				cout << i[1] << endl;
				return;
		}
		else continue;
	}
//第三种情况,重新从地址块最后面开辟一块地址块,需要考虑内存池的最大值。
	int end = address.back()[2]+1;
	if (end  > 99 || end + size - 1 > 99) {
		cout << "error" << endl;
		return;
	}
	cout << end  << endl;
	address.push_back({ 1,end ,end + size-1 });
}
//释放函数
void rel(vector<vector<int>> &address,int begin) {
//对空的内存池释放	
if (address.size() == 0) {
		cout << "error" << endl;
		return;
	}
//寻找首地址相同的内存块
	for (auto &i : address) {
		if (i[0] == 1) {
			if (i[1] == begin) {
				if (i[0] == -1 || i[0] == 0) {
					cout << "error" << endl;
					return;
				}
				else {
					i[0] = -1;
				}
			}
		}
		else if (i[0] == -1) {
			cout << "error" << endl;
		}
		else
			continue;
	}
}
int main() {
	int n = 0;
	cin >> n; //读取n
	string temp;
	getline(cin, temp);//换行
	vector<pair<int,int>> op;//二元的操作组,first只有1和0的值,1代表申请内存,0代表释放内存,second代表操作的参数。
	/*7
REQUEST=10
REQUEST=20
RELEASE=0
RELEASE=20
RELEASE=0
REQUEST=20
REQUEST=10
	*/
	while (n--) {
		string str;
		getline(cin, str);
		int p = str.size()-1;
		int num = 0;
		int flag = 1;
		while (str[p] >= '0' && str[p]<='9') {
			num += str[p] - '0';
			num *= 10;
			--p;
		}
//因为输入是格式化的,所以只要判断字符串中第3个元素就可以区分2种操作。
		if (str[2] == 'L') {
			flag = 0;
		}
		op.push_back({flag,num});
	}
	vector<vector<int>> address;
//地址组每个元素的每一列代表的含义:第一列是状态,有0(未使用),-1(已释放),1(在使用);第二列是每块内存的起始地址,第三列是每块内存的终点坐标。
//执行操作。
	for (auto &i : op) {
		if (i.first) {
			alloc(address,i.second);
		}
		else {
			rel(address,i.second);
		}
	}
	return 0;
}

原文地址:http://www.cnblogs.com/chunbai11/p/16885204.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性