首页 > 代码库 > 【奇虎360】 2016年技术岗A编程题 -- 内存管理
【奇虎360】 2016年技术岗A编程题 -- 内存管理
哎,感觉考试好难啊啊啊啊啊啊!!!!40个选择题+两个编程题。120分钟。那么多读程序的题目。题目都看不完有木有啊!!!!!!!!感觉整个人生都不好了。
题目描述:(具体的也记不清楚了,但是主要内容就是下面的)
模拟内存的分配 释放 和 整理。
操作如下:
new size:分配size字节大小的内存块,返回内存块的句柄handle,size为正整数,如果没有合适的空间返回null。
del handle:释放句柄handle指向的内存块。
def 整理内存碎片。
输入第一行为一个n,m , 分别表示操作次数和内存空间大小。
接下来n行是表示一个操作。
样例:
输入:
6 10
new 5
new 3
del 1
new 6
def
new 6
输出:
1
2
NULL
3
1 #include<iostream> 2 #include<list> 3 #include<string> 4 using namespace std; 5 struct Memory{ 6 unsigned int value; 7 unsigned handle ; 8 bool isuesed;//使用1 没有使用0 9 }; 10 11 void New(list<Memory> &list_memory,unsigned int value,int &handle ){ 12 bool is_success = false; 13 for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end(); i++){ 14 if (!(*i).isuesed && (*i).value >= value){ 15 if ((*i).value =http://www.mamicode.com/= value){ 16 (*i).isuesed = 1; 17 (*i).handle = handle++; 18 } 19 else{ 20 Memory m; 21 m.handle = handle++; 22 m.isuesed = 1; 23 m.value =http://www.mamicode.com/ value; 24 list_memory.insert(i, m); 25 (*i).value -= value; 26 } 27 is_success = true; 28 cout << handle - 1 << endl; 29 break; 30 } 31 } 32 if (!is_success){ 33 cout << "NULL" << endl; 34 } 35 } 36 37 void Def(list<Memory> &list_memory){ 38 int value = http://www.mamicode.com/0; 39 for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end();){ 40 if (!(*i).isuesed){ 41 value += (*i).value; 42 (*i).handle = 0; 43 i = list_memory.erase(i); 44 45 } 46 else{ 47 i++; 48 } 49 50 } 51 if (value){ 52 Memory me; 53 me.isuesed = 0; 54 me.value =http://www.mamicode.com/ value; 55 me.handle = 0; 56 list_memory.push_back(me); 57 } 58 } 59 60 void Delete(list<Memory> &list_memory,unsigned int value){ 61 bool is_success = false; 62 for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end(); i++){ 63 64 if ((*i).handle == value){ 65 (*i).isuesed = 0; 66 (*i).handle = 0; 67 int _del_value; 68 if (i != list_memory.begin()){ 69 i--; 70 if (!(*i).isuesed){ 71 72 _del_value = http://www.mamicode.com/(*i).value; 73 i = list_memory.erase(i); 74 (*i).value += _del_value; 75 } 76 else{ 77 i++; 78 } 79 } 80 i++; 81 if (i != list_memory.end() && !(*i).isuesed){ 82 _del_value = http://www.mamicode.com/(*i).value; 83 i = list_memory.erase(i); 84 i--; 85 (*i).value += _del_value; 86 } 87 is_success = true; 88 break; 89 } 90 } 91 if (!is_success){ 92 cout << "error" << endl; 93 } 94 } 95 96 int main(){ 97 int n, m; 98 while (cin >> n >> m){ 99 list<Memory> list_memory;100 Memory me;101 me.value =http://www.mamicode.com/ m;102 me.isuesed = 0;103 me.handle = 0;104 list_memory.push_back(me);105 static int handle = 1;106 for (int l = 0; l < n; l++){107 string op;108 unsigned int value;109 cin >> op;110 if (op == "new"){111 cin >> value;112 New(list_memory, value,handle);113 }114 else if (op == "def"){115 116 Def(list_memory);117 }118 else if (op == "del"){119 cin >> value;120 Delete(list_memory, value);121 }122 123 for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end(); i++){124 cout << (*i).value << ‘ ‘ << (*i).isuesed << ‘ ‘ << (*i).handle << endl;125 }126 cout << "---------------------分割线-------------------------------------------" << endl;127 }128 }129 }130
【奇虎360】 2016年技术岗A编程题 -- 内存管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。