IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 操作系统:磁盘调度算法(JAVA) -> 正文阅读

[数据结构与算法]操作系统:磁盘调度算法(JAVA)

????????

	
	import java.util.Arrays;
	import java.util.Scanner;
	
	import org.omg.Messaging.SYNC_WITH_TRANSPORT;
	
	public class DiskSchedulingAlgorithm {
		
		private static Scanner in;
		public static void main(String[] args) {
			in = new Scanner(System.in);
			System.out.println("请输入磁盘柱头起始位置:");
			int start =  in.nextInt();
			System.out.println("输入请求队列的个数:");
			int num = in.nextInt();
			int[] S = new int[num];  
			System.out.println("请输入各请求的磁道位置:");
			for(int i = 0;i<num;i++){
				S[i] = in.nextInt();
			}
			boolean T = true;
			int C;
			int choose ;
			while(T==true){
			System.out.println("请选择对应的磁盘调度:"+" "+"1.FCFS 2.SSTF 3.SCAN");
			 choose =in.nextInt();
			switch(choose){
			case 1:
				FCFS(S,start,num); 
				break;
			case 2:
				SSTF(S,start,num);
				break;
			case 3:
				SCAN(S,start,num);
				break;
			}
			System.out.println(" ");
			System.out.println("是否继续: 1/2");
			C = in.nextInt();
			T = false;
			if(C==1){
				T = true;
			}
			else{
				System.out.printf("您已退出!");
			}
		  }
		}
		public static void FCFS(int S[],int start,int num){
			int result = 0;
			System.out.print("采用FCFS算法调度时,磁头移动顺序为:");
			System.out.print(start);
			for(int i = 0;i<num-1;i++){
				System.out.print("->"+S[i]);
				result += Math.abs(S[i+1]-S[i]);
			}
			double avarage = 1.0*result/num;
			System.out.println(" ");
			System.out.print("磁头移动总量为:"+result+" "+"磁盘的平均移动量为:"+String.format("%.2f",avarage));
		}
		public static void SSTF(int S[],int start,int num){
			int[] T = new int[num];
			for(int i = 0;i<num;i++){
				T[i]=S[i];
			}
			int sum = 0;
			int key=num;
			System.out.print("采用SSTF算法调度时,磁头移动顺序为:");
			System.out.print(start);
			while(num>=1){
			int[] DISTANCE = new int[num];
			
			for(int i = 0;i<num;i++){
					DISTANCE[i] = Math.abs(start-T[i]);   //存入各磁道和磁头的距离
			}
			int min = DISTANCE[0];
			int corners= 0;
			for(int i = 1;i<num;i++){
				if(min>DISTANCE[i]){
				   min = DISTANCE[i];
				   corners = i;
				}
			}
			System.out.print("->"+S[corners]); 
			start =  T[corners];    //输入距离最短的值
			sum +=DISTANCE[corners];
			num --;
			int k=0;
			for(int i = 0;i<=num;i++){
				if(T[i]!=T[corners]){
					T[k] = T[i];
					k++;
				}
			}
		}
		    System.out.println(" ");
			System.out.println("磁头移动量为:"+sum+" "+"平均磁头移动量为:"+(double)(sum*1.0/key));
		}
		public static void SCAN(int S[],int start,int num){
			Arrays.sort(S);
			int key =num;
			System.out.println("请选择第一个要访问的磁道号:");
			int First = in.nextInt();
			int corners = 0;
			System.out.print(start);
			int sum = Math.abs(start-First);
			for(int i = 0;i<num;i++){
				if(S[i]==First){
					corners = i;
				}
			}
			if(start>First){  
				for(int i = corners;i>=0;i--){
					System.out.print("->"+S[i]);
				}
				for(int i = corners+1;i<num;i++){
					System.out.print("->"+S[i]);
				}
				for(int i = corners;i>0;i--){
					sum+=Math.abs(S[i]-S[i-1]);
				}
				sum +=Math.abs(S[0]-S[corners+1]);
				for(int i = corners+2;i<num;i++){
					sum+=Math.abs(S[i]-S[i-1]);
				}
				double average = sum*1.0/key;
				System.out.println(" ");
				System.out.println("采用SCAN算法调度时,磁头移动顺序为:");
				System.out.println("磁头移动量为:"+sum+" "+"平均磁头移动量为:"+String.format("%.2f", average));
			}	
			else{
				for(int i = corners;i<num;i++){
					System.out.print("->"+S[i]);
				}
				for(int i = corners-1;i>=0;i--){
					System.out.print("->"+S[i]);
				}
				for(int i = corners+1;i<num;i++){
					sum+=Math.abs(S[i]-S[i-1]);
				}
				sum +=Math.abs(S[num-1]-S[corners-1]);
				for(int i = corners-1;i>0;i--){
					sum+=Math.abs(S[i]-S[i-1]);
				}
				double average = sum*1.0/key;
				System.out.println(" ");
				System.out.println("采用SCAN算法调度时,磁头移动顺序为:");
				System.out.println("磁头移动量为:"+sum+" "+"平均磁头移动量为:"+String.format("%.2f", average));
			}
		}
	}

运行效果:

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:17:23  更:2021-12-05 12:18:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:57:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码