最短寻道时间优先算法-C++

2023-11-10 14:20

本文主要是介绍最短寻道时间优先算法-C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.算法解析

最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。比如现有需要读取的数据的柱面次序为:35 12 73 230 80 20 310 120,初始柱面为65号,当65操作结束后,应该先处理73号柱面的请求,然后到达80号柱面执行操作,随后处理120号柱面请求,后继操作的次序应该是35、20、12、230、310。

采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了400多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。

2.代码

①最短寻道时间优先算法函数SSTF()

int SSTF(int *cyclist, int *cycorder, int n, int start){
//参数:cyclist[] 输入的待操作的柱面数组,cycorder[] 操作柱面的顺序结果
//     n 柱面的个数,start 初始的柱面号
//返回值:sum SSTF的走道总和int sum, min, mid, index, tag[100] = {0};sum = 0;for(int j=0; j<n; j++){    //此循环得出cycorder[]和累加summin = 9999;    //将最小值初始化为无穷大for(int i=0; i<n; i++)  //次循环得出距离start最小值minif(tag[i] == 0){mid = abs(start - cyclist[i]);if(min > mid){min = mid;index = i;   //记录下与start最近柱面的下标}}sum += min;tag[index] = 1;          //将标记数组置为1,表示已经将其柱面进行操作cycorder[j] = cyclist[index];start = cyclist[index];}return sum;
}

②全部代码

#include<iostream>
#include<cmath>
using namespace std;int SSTF(int *cyclist, int *cycorder, int n, int start){int sum, min, mid, index, tag[100] = {0};sum = 0;for(int j=0; j<n; j++){min = 9999;for(int i=0; i<n; i++)if(tag[i] == 0){mid = abs(start - cyclist[i]);if(min > mid){min = mid;index = i;}}sum += min;tag[index] = 1;cycorder[j] = cyclist[index];start = cyclist[index];}return sum;
}int main(){int cyclist[100], cycorder[100], n, start;cout<<"请输入初始柱面和待执行柱面数量:";cin>>start>>n;cout<<"请输入待执行柱面:";for(int i=0; i<n; i++)cin>>cyclist[i];cout<<"磁头走过总道数为:"<<SSTF(cyclist, cycorder, n, start)<<endl;cout<<"SSTF走道顺序为:";for(int i=0; i<n; i++){cout<<cycorder[i];if(i+1 != n)cout<<" -> "; }return 0;
}
/*
65 8
35 12 73 230 80 20 310 120
*/

3.运行结果
在这里插入图片描述

这篇关于最短寻道时间优先算法-C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383226

相关文章

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit