最短寻道时间优先算法-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

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(