360 校招内存管理Java版
来源:互联网 发布:adc0804 51单片机 编辑:程序博客网 时间:2024/05/20 21:44
package Easy;import java.util.Scanner;public class Three2 { public static void main(String[] args) { Three2 t = new Three2(); Scanner in = new Scanner(System.in); int T = in.nextInt(); int maxMem = in.nextInt(); int handleNum = 1; Mem head = t.getMemInstance(); while(in.hasNext()){ String operation = in.next(); if(operation.equals("def")){ //整理内存不做任何输出 Mem p = head; while(p.next!=null){ if(p.next.isDel){ p.next=p.next.next; }else{ p=p.next; } } }else if(operation.equals("new")){ //申请内存,成功返回句柄值,失败返回NULL int size = in.nextInt(); Mem node = t.getMemInstance(); node.size = size; Mem p = head; Mem begin = head; Mem end = head; int totalUsed=0; int innerCan = 0; while(p!=null){ totalUsed += p.size; if(p.isDel){ end = p; innerCan += p.size; }else{ begin = p; innerCan = 0; } if(innerCan>=size){ end = end.next; break; } if(p.next!=null){ p=p.next; }else{ break; } } if(innerCan>size){ Mem newNode1 = t.getMemInstance(); newNode1.size = size; newNode1.handleNo = handleNum; System.out.println(handleNum); handleNum++; Mem newNode2 = t.getMemInstance(); newNode2.size = innerCan-size; newNode2.handleNo = -1; newNode2.isDel = true; newNode1.next = newNode2; newNode2.next = end; begin.next = newNode1; }else if(innerCan==size){ Mem newNode = t.getMemInstance(); newNode.size = size; newNode.handleNo = handleNum; System.out.println(handleNum); newNode.next=begin.next; begin.next=newNode; handleNum++; }else if(maxMem-totalUsed>=size){ Mem newNode = t.getMemInstance(); newNode.size = size; newNode.handleNo = handleNum; System.out.println(handleNum); handleNum++; p.next=newNode; }else{ System.out.println("NULL"); } }else if(operation.equals("del")){ //释放句柄指向的内存,失败返回ILLEGAL_OPERATION,成功无输出 int index = in.nextInt(); Mem p = head; boolean canDel = false; if(index<handleNum){ while(p!=null){ if(p.handleNo==index){ if(!p.isDel){ p.isDel=true; canDel = true; } break; } p=p.next; } } if(!canDel){ System.out.println("ILLEGAL_OPERATION"); } } } } private Mem getMemInstance(){ return new Mem(); } class Mem{ public int size=0; public int handleNo=-1; public Mem next = null; public boolean isDel = false; }}
0 0
- 360 校招内存管理Java版
- 360校招编程题:内存管理
- 2017校招 360 笔试题 编程题 内存管理
- 2013百度校招笔试真题以及解析(内存管理及其优缺点总结)
- 【Java】Java内存管理
- java内存管理-堆栈内存
- java内存管理-内存回收
- JAVA内存管理
- java内存管理
- JAVA 内存管理
- JAVA 内存管理
- java得内存管理
- Java内存管理思想
- Java内存管理思想
- Java内存管理思想
- java内存管理
- Java内存管理
- Java内存管理概述
- BZOJ斜率优化水题集
- UVALive3181-Fixing the Great Wall(区间dp)
- java中的值传递与引用传递
- windchill11 安装遇到的问题
- Linux运维笔记----系统恢复技术
- 360 校招内存管理Java版
- 【NOIP2012模拟10.26】电影票
- 醉鹅舜达餐饮才是总部
- 开源框架
- Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
- java运算符
- 常见的几种页面调度算法
- CodeBlocks配置
- 360的一道编程题