1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner;
public class Main { static int a[]=new int[]{38,6,37,100,14,124,65,67}; static boolean st[]=new boolean[8]; static int pos=30,ans=0; public static void main(String[] args) { FCFS(); SSTF(); SCAN(); } static void FCFS(){ pos=30; System.out.println("FCFS算法:"); ans=0; List<Integer> list=new ArrayList<>(); System.out.printf("磁头移动顺序为:%d ",pos); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); list.add(a[i]); } System.out.println(); calc(list); System.out.println("="+ans); } static void calc(List<Integer> list){ pos=30; System.out.print("磁道移动数为:"); for(int i=0;i<list.size();i++){ System.out.print(Math.abs(list.get(i)-pos)); if(i!=list.size()-1) System.out.print("+"); ans=ans+Math.abs(list.get(i)-pos); pos=list.get(i); } } static void SSTF(){ pos=30; System.out.println("SSTF算法:"); System.out.printf("磁头移动顺序为:%d ",pos); ans=0; List<Integer> list=new ArrayList<>(); for(int i=0;i<a.length;i++){ int idx=-1,ma=1<<30; for(int j=0;j<a.length;j++){ if(!st[j]&&Math.abs(a[j]-pos)<ma) { ma=Math.abs(a[j]-pos); idx=j; } } st[idx]=true; list.add(a[idx]); pos=a[idx]; System.out.print(a[idx]+" "); } System.out.println(); calc(list); System.out.println("="+ans); } static void SCAN(){ pos=30; ans=0; System.out.println("SCAN算法:"); int b[]=new int[a.length]; for(int i=0;i<a.length;i++) b[i]=a[i]; Arrays.sort(b); System.out.printf("磁头移动顺序为:%d ",pos); List<Integer> list=new ArrayList<>(); int i=0; for(;i<b.length;i++) if(b[i]>=pos) break; for(int j=i;j<b.length;j++){ System.out.print(b[j]+" "); pos=b[j]; list.add(b[j]); } for(int j=i-1;j>=0;j--){ System.out.print(b[j]+" "); pos=b[j]; list.add(b[j]); } System.out.println(); calc(list); System.out.println("="+ans); }
}
|
FCFS算法:
磁头移动顺序为:30 38 6 37 100 14 124 65 67
磁道移动数为:8+32+31+63+86+110+59+2=391
SSTF算法:
磁头移动顺序为:30 37 38 14 6 65 67 100 124
磁道移动数为:7+1+24+8+59+2+33+24=158
SCAN算法:
磁头移动顺序为:30 37 38 65 67 100 124 14 6
磁道移动数为:7+1+27+2+33+24+110+8=212