调度算法 SCAN 磁盘(C语言描述)

  • Post author:
  • Post category:其他
#include <stdio.h>

#include <math.h>

#define N 100

#define MAX 10001

typedef struct Pro{

float aim;

float change;

bool loc;

}Pro;

Pro P[N];

void InputData(Pro a[],int n){

for(int i=0;i<n;i++){

printf(“第%d进程位置”,i+1);

scanf(“%f”,&a[i].aim);

a[i].loc=false;

}

}

float OutPutFinal(Pro a[],int n){

float sum=0;

for(int i=0;i<n;i++){

sum=sum+a[i].change;

}

return sum/n;

}

void Print(Pro a[],int i){

printf(”   %d           %3.0f        %3.0f\n”,i+1,a[i].aim,a[i].change);

}

int FindAim(Pro a[],int n,float location){

for(int i=0;i<n;i++){

if(a[i].aim>=location){

return i;

}

}

return i;

}

bool Check(Pro a[],int n){

for(int i=0;i<n;i++){

if(!a[i].loc)

return true;

}

return false;

}

void SortUp(Pro a[],int n){

Pro temp;

int k;

for(int i=0;i<n;i++){

k=i;

for(int j=i+1;j<n;j++){

if(a[k].aim>=a[j].aim){

k=j;

}

}

if(k!=i){

temp=a[k];

a[k]=a[i];

a[i]=temp;

}

}

}

void SortLow(Pro a[],int n){

Pro temp;

int k;

for(int i=0;i<n;i++){

k=i;

for(int j=i+1;j<n;j++){

if(a[k].aim<=a[j].aim){

k=j;

}

}

if(k!=i){

temp=a[k];

a[k]=a[i];

a[i]=temp;

}

}

}

int main(){

int n,location,k;

int i=0;

printf(“输入进程的个数:”);

scanf(“%d”,&n);

printf(“当前位置:”);

scanf(“%d”,&location);

InputData(P,n);

SortUp(P,n);

i=FindAim(P,n,location);

k=i;

printf(”          起始位置%d\n”,location);

printf(”  进程       目标位置   改变位置\n”);

while(Check(P,n)){

P[i].loc=true;

P[i].change=abs(P[i].aim-location);

location=P[i].aim;

Print(P,i);

i++;

if(i==n){

i=0;

SortLow(P,k);

}

}

printf(“ave=平均移动为%.2f\n”,OutPutFinal(P,n));

return 0;

}

版权声明:本文为m0_37848958原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。