半条命16吧 关注:393贴子:26,041
  • 6回复贴,共1

艺术的辉煌,创世纪,只是在气泡里的幻影

只看楼主收藏回复



IP属地:河南1楼2022-04-14 12:16回复
    法司法所


    IP属地:河南2楼2022-04-23 23:51
    回复
      艾哈德恒大华府


      IP属地:河南3楼2022-04-23 23:51
      回复
        发达合法化孤鸿寡鹄


        IP属地:河南4楼2022-04-23 23:51
        回复
          发挥大黄蜂


          IP属地:河南5楼2022-04-23 23:51
          回复
            是复合肥待会封档好地方


            IP属地:河南6楼2022-04-23 23:51
            回复
              package dsg;
              import java.io.*;
              import java.util.*;
              public class aaa {
              private static BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));
              private static BufferedWriter cout=new BufferedWriter(new OutputStreamWriter(System.out));
              private static int pID=1;
              private static class Partition{
              String Name;
              int ID;
              int start;
              int size;
              char state='F';
              public Partition(String Name,int ID, int start, int size) {
              this.Name=Name;
              this.ID = ID;
              this.start = start;
              this.size = size;
              }
              }
              public static LinkedList<Partition> partitions=new LinkedList<>();
              public static int init() throws IOException {
              System.out.println("请输入要分配的内存大小和内存名称");
              String[] str=cin.readLine().split(" ");
              int size=Integer.parseInt(str[0]);
              String Name=str[1];
              partitions.add(new Partition(Name,pID++,0,size));
              System.out.println("请输入要用的算法,1为BF,2为FF,3为WF");
              str=cin.readLine().split(" ");
              int choose=Integer.parseInt(str[0]);
              display();
              return choose;
              }
              public static void display(){
              System.out.println("------------------------------------");
              System.out.println("ID\t名称\t分区大小\t起始地址\t结束地址\t状态");
              for(Partition p:partitions){
              if(p.state=='F') System.out.println(p.ID+"\t"+p.Name+'\t'+p.size+"\t\t"+
              p.start+"\t\t"+(p.start+p.size-1)+"\t\t空闲");
              if(p.state=='B') System.out.println(p.ID+"\t"+p.Name+'\t'+p.size+"\t\t"+
              p.start+"\t\t"+(p.start+p.size-1)+"\t\t占用");
              }
              System.out.println("------------------------------------");
              }
              public static boolean check(int size,String Name){//size为要申请的空间
              Partition t;
              for(Partition p:partitions){
              if(p.Name.equals(Name)) {
              System.out.println("已存在同名作业");
              return false;
              }
              }
              for(Partition p:partitions){
              if(p.size>=size&&p.state=='F'){
              t=new Partition(Name,pID++,p.start,size);
              t.state='B';
              p.size-=size;
              p.start+=size;
              partitions.add(t);
              Collections.sort(partitions, new Comparator<Partition>() {
              @Override
              public int compare(Partition t0, Partition t1) {
              return t0.start-t1.start;
              }
              });
              return true;
              }
              }
              return false;
              }
              public static void allocate(int i) throws Exception{
              System.out.println("输入申请空间的大小和作业名称");
              String[] str=cin.readLine().split(" ");
              int size=Integer.parseInt(str[0]);
              String Name=str[1];
              Partition p=null;
              boolean Full=false;
              if(i==1){//BF
              Collections.sort(partitions, new Comparator<Partition>() {
              @Override
              public int compare(Partition t0, Partition t1) {
              return t1.size-t0.size;
              }
              });
              }
              else if(i==2){//FF
              Collections.sort(partitions, new Comparator<Partition>() {
              @Override
              public int compare(Partition t0, Partition t1) {
              return t0.start-t1.start;
              }
              });
              }
              else if(i==3){//WF
              Collections.sort(partitions, new Comparator<Partition>() {
              @Override
              public int compare(Partition t0, Partition t1) {
              return t0.size-t1.size;
              }
              });
              }
              else System.out.println("输入无效");
              boolean check=check(size,Name);
              if(!check) System.out.println("或没有足够的空间分配");
              }
              public static void merge(){
              Collections.sort(partitions, Comparator.comparingInt(o -> o.start));
              int index=1;
              for(Partition p:partitions){
              p.ID=index++;//重新编号
              }
              for(int i=0;i< partitions.size()-1;i++){
              if(partitions.get(i).state=='F'&&partitions.get(i+1).state=='F'){
              partitions.get(i).size+=partitions.get(i+1).size;
              partitions.remove(i);
              i=0;
              }
              }
              }
              public static void free() throws IOException {
              System.out.println("输入要释放的作业名称");
              Collections.sort(partitions, Comparator.comparingInt(o -> o.start));
              String Name=cin.readLine().split(" ")[0];
              boolean isFind=false;
              //Partition aim=null;
              for(Partition p:partitions){
              if(!p.Name.equals("A")&&p.state=='F') {
              p.Name="@";
              }
              }
              for(Partition p:partitions){
              if(Name.equals(p.Name)&&p.state=='B') {
              isFind=true;
              break;
              }
              }
              if(!isFind) {
              System.out.println("没有这个作业或该空间为空闲");
              return;
              }
              //存在
              int index=1;
              for(Partition p:partitions){
              p.ID=index++;//重新编号
              }
              int aim = 0;
              for(Partition p:partitions){
              if(p.Name.equals(Name)) {
              aim=p.ID;
              p.state='F';//先释放
              p.Name="A";
              break;
              }
              }
              int pre=aim-1,next=aim+1;
              /*if(pre>0&&partitions.get(pre-1).state=='F'){
              //前一个存在且空闲
              partitions.get(aim-1).size= partitions.get(aim-1).size+partitions.get(pre-1).size;
              partitions.get(aim-1).start=partitions.get(pre-1).start;
              partitions.remove(pre-1);
              }
              //display();
              if(next<= partitions.size()&&partitions.get(next-1).state=='F'){
              //后一个存在且空闲
              partitions.get(next-1).size= partitions.get(aim-1).size+partitions.get(next-1).size;
              partitions.get(next-1).start=partitions.get(aim-1).start;
              partitions.remove(aim-1);
              }*/
              merge();
              for(Partition p:partitions){
              if(p.Name.equals(Name)) {
              aim=p.ID;
              p.state='F';//先释放
              p.Name="A";
              break;
              }
              }
              int cntA=0;
              int cnt=0;
              for(Partition p:partitions){
              if(p.Name.equals("A")) {
              cntA++;
              }
              else cnt++;
              }
              if(cntA>1&&cnt==0) {
              merge();
              }
              }
              public static void main(String[] args) throws Exception{
              int choose=init();
              while(true){
              System.out.println("1.安排作业");
              System.out.println("2.取消作业并回收内存");
              System.out.println("3.查看当前状态");
              System.out.println("4.退出");
              switch (Integer.parseInt(cin.readLine().split(" ")[0])) {
              case 1:
              //System.out.println("请选择算法,1为BF,2为FF,3为WF");
              allocate(choose);
              display();
              break;
              case 2:
              free();
              break;
              case 3:
              display();
              break;
              case 4: return;
              }
              }
              }
              }


              IP属地:河南7楼2022-04-29 15:57
              回复