360 校招内存管理Java版
2016-09-10 21:36
120 查看
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; } }
相关文章推荐
- 360校招编程题:内存管理
- 2017校招 360 笔试题 编程题 内存管理
- Java优化编程--内存管理
- JAVA内存管理
- [*****]Java内存管理的几个技巧
- Java内存管理(二、Java垃圾回收)
- Java内存管理-- GC(Garbage Collection)的基本概念 --Hotspot的分代回收
- java内存管理及内存泄露
- Java的内存管理及其检测之一
- Java内存管理(一、内存分配)
- Java内存管理(二、Java垃圾回收)
- Java程序内存管理[摘]
- ★ Java内存管理特点
- 研究一下Java的内存管理
- sun培训笔记--java内存管理,GC调优
- 简单介绍Java语言中内存管理的几个技巧
- JAVA 实现内存管理 和 LOG 保存的 代码
- Java内存管理思想
- Java内存管理
- Java内存管理