# java实现——最短寻道时间优先（SSTF）和扫描（SCAN）算法

package 磁盘调度算法;
import java.util.List;
import java.util.Scanner;

//最短寻道时间优先
public class SSTF{
private int visit[];
private int nearIndex=0;
public int[] sstf(int queue[],int start){
int nearNum=9999;
visit=new int[queue.length];
for(int i=0;i<queue.length;i++){
for(int j=0;j<queue.length;j++){
if(queue[j]!=-1){
if(Math.abs(nearNum-start)>Math.abs(queue[j]-start)){
nearNum=queue[j];
nearIndex=j;
}
}
}
visit[i]=nearNum;
queue[nearIndex]=-1;
start=nearNum;
nearNum=9999;
}
return visit;
}
public void print(int visit[],int start){
double sum=0;
System.out.print("访问序列：");
for(int i=0;i<visit.length;i++){
System.out.print(visit[i]+" ");
sum=Math.abs(visit[i]-start)+sum;
start=visit[i];
}
System.out.println();
System.out.println("经过的磁道总数："+sum);
System.out.println("平均寻道长度："+sum/visit.length);
}

public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入磁盘请求序列长度：");
int a=sc.nextInt();
System.out.println("请输入磁盘请求访问序列：");
int[] queue=new int[a];
for(int i=0;i<a;i++){
queue[i]=sc.nextInt();
}
SSTF sstf=new SSTF();
System.out.println("请输入读写头起始位置：");
int start=sc.nextInt();
sstf.print(sstf.sstf(queue, start),start);
}
}

package 磁盘调度算法2;
import java.util.List;
import java.util.Scanner;

public class SCAN{
private int visit[];
private int nearIndex=0;
public int[] scan(int queue[],int start,int direction){
int nearNum=9999;
int index=0;
visit=new int[queue.length];
for(int i=0;i<queue.length;i++){
index=-1;
for(int j=0;j<queue.length;j++){
if(queue[j]!=-1){
if((direction==1)&&(queue[j]>start)&&(Math.abs(nearNum-start)>Math.abs(queue[j]-start))){
nearNum=queue[j];
nearIndex=j;
index=0;
}
else if((direction==0)&&(queue[j]<start)&&(Math.abs(nearNum-start)>Math.abs(queue[j]-start))){
nearNum=queue[j];
nearIndex=j;
index=0;
}
}
}
if((direction==1)&&(index==-1)){
direction=0;
i=i-1;
}
else if((direction==0)&&(index==-1)){
direction=1;
i=i-1;
}
if(index==0){
visit[i]=nearNum;
queue[nearIndex]=-1;
start=nearNum;
nearNum=9999;
}
}
return visit;
}

public void print(int visit[],int start){
double sum=0;
System.out.print("访问序列：");
for(int i=0;i<visit.length;i++){
System.out.print(visit[i]+" ");
sum=Math.abs(visit[i]-start)+sum;
start=visit[i];
}
System.out.println();
System.out.println("经过的磁道总数："+sum);
System.out.println("平均寻道长度："+sum/visit.length);
}

public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入磁盘请求序列长度：");
int a=sc.nextInt();
System.out.println("请输入磁盘请求访问序列：");
int[] queue=new int[a];
for(int i=0;i<a;i++){
queue[i]=sc.nextInt();
}
SCAN scan=new SCAN();
System.out.println("请输入读写头起始位置：");
int start=sc.nextInt();
System.out.println("磁道增加的方向：（0向磁道号减少的方向移动,1向磁道号增加的方向移动）");
int direction=sc.nextInt();
scan.print(scan.scan(queue, start,direction),start);
}
}

• 3
点赞
• 0
评论
• 26
收藏
• 一键三连
• 扫一扫，分享海报

11-09
01-30
05-22 818
05-30
06-21 1万+
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。