磁盘调度算法

#include<stdio.h>  
#include<stdlib.h>  
#include<time.h>
#include<math.h>
#define N 8
int *Init(int arr[])  //随机产生磁道
{  
    int i;  
      
    srand((unsigned int)time(0));  
    for (i = 0; i < N; i++)  
    {  
        arr[i] = rand() % 200 + 1;  
        printf("%d ", arr[i]);  
    }  
    printf("\n"); 
    return arr;
}
  
void two_part(int arr[])  //把产生产生的随机磁道分为从小到大 从大到小两个部分排序
{  
    int i;  
    int j;  
    int k = 0;  
    int sum = 0; 
    int a[N];  
    int b[N];  
    int num = 100;      //定义当前磁头在100号磁道上  
    a[0] = 100;  
    b[0] = 100;  
    for (i = 0; i < N; i++)       //冒泡排序算法 将所有磁道从小大排序
    {  
        for (j = 1; j < N - i; j++)  
        {  
            if (arr[j] < arr[j - 1])  
            {  
                int tmp = arr[j];  
                arr[j] = arr[j - 1];  
                arr[j - 1] = tmp;  
            }  
        }  
    }    
    j = 0;  
    for (i = 0; i < N; i++)  
    {  
        if (arr[i] >= num)  //比磁头大的放在a数组
        {  
            a[j+1] = arr[i];  
            j++;  
        }  
        else  
        {  
            b[k+1] = arr[i];  //比磁头小的放在b数组
            k++;  
        }  
    }  
    printf("\n电梯算法访问序列:\n");  
    for (i = 1; i <= j; i++)  //循环输出从大到小的磁道
    {  
        printf("%d->", a[i]);  
    }  
    for (i = k; i >0; i--)   //循环输出从小到大的磁道
    {  
        printf("%d", b[i]);
if(i!=1){
printf("->");
}
    }
printf("\n");
    sum = ((a[j]-100)*2+(100- b[1]));  
printf("移动的磁道总数:%d\n",sum);
    printf("平均寻道长度:%d\n", sum/N);//计算平均寻到长度



void sstf(int arr[]){//最短寻道时间优先
     int i;
     int j;
int tmp;
int num=100;
int x;
int sum=0;
     printf("\n最短寻道优先算法访问排序:\n");
     for(i=0;i<N;i++){
          tmp = abs(arr[0]-num); //初始化tmp值
          x = 0;
          for(j=1;j<N-i;j++){ 
               if(abs(arr[j]-num)<tmp){
                    x = j;
                    tmp = abs(arr[j]-num);
               }
          }
          printf("%d",arr[x]);
  if(i!=N-1){
        printf("->");
}
               num = arr[x];  //当前磁头改变
    sum =sum +tmp;
               for(j=0;j<N-x-i;j++){
                    arr[x+j]=arr[x+j+1];
               }
     }
printf("\n移动的磁道总数:%d",sum);
printf("\n平均寻道长度:%d\n",sum/N);
}
  
void main()  
{  
    int arr[N] = { 0 };
int i,s=0;
printf("--------------------------------\n");
printf("-       磁盘调度算法           -\n");
printf("--------------------------------\n");
printf("显示随机生产的磁道:\n");
    int *ret=Init(arr);
printf("\n-------------------------------------\n");
    two_part(ret);
printf("\n*************************************\n");
sstf(ret);
    getchar();  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值