(Operation) Short job scheduling algorithm

Code (work around yourself!)

#include <stdio.h> 

struct sjf // Define the structure of the process
{
char name [10]; // process name
float arrivetime; // arrival time
float servicetime; // service time
float starttime; // start time
float finishtime; // completion time
float zztime ; // turnover time
float dqzztime; // weighted turnaround time
};
sjf b [100]; // define the maximum number of short job priority algorithm processes
void Sinput (sjf * p, int N) // input function
{
int i ;
printf ("Enter the process name, arrival time, service time: \ n");
for (i = 0; i <= N-1; i ++)
{
printf ("Enter the name of the% d process, arrival time, Service time: ", i + 1);
scanf ("% s% f% f ", & p [i] .name, & p [i] .arrivetime, & p [i] .servicetime);

}
} // output each Process information

void
SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)
{
int k;
printf("\n执行顺序:\n");
printf("%s",p[0].name);
for(k=1;k<N;k++)
{
printf("-%s",p[k].name);
}
printf("\n进程名\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n");
for(k=0;k<=N-1;k++)
{
printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
}
}//输出执行顺序

void Ssort(sjf *p,int N) //按短作业优先算法排序
{
for(int i=1;i<=N-1;i++)
for(int j=1;j<=i;j++)
if (p [i] .servicetime <p [j] .servicetime)
{
sjf temp;
temp = p [i];
p [i] = p [j];
p [j] = temp;
}
} // Run result (Bubbling sort)

void Sdeal (sjf * p, float arrivetime, float servicetime, float starttime, float finishtime, float & zztime, float & dqzztime, int N)
{
int k;
for (k = 0; k <= N-1; k ++)
{
if (k == 0)
{
p [k] .starttime = p [k] .arrivetime;
p [k] .finishtime = p [k] .arrivetime + p [k] .servicetime;
}
else
{
p [k] .starttime = p [k-1] .finishtime; // Start time = Completion time of the previous process
p [k] .finishtime = p [k-1] .finishtime + p [k] .servicetime; / / End time = Completion time of the previous process + Service time of the current process
)
}
for (k = 0; k <= N-1; k ++)
{
p [k] .zztime = p [k] .finishtime-p [k] .arrivetime; // Turnover time = completion time-arrival time
p [k] .dqzztime = p [k] .zztime / p [k] .servicetime; // weighted turnaround time = turnaround time / service time
}
} // calculate various times

void SJF (sjf * p, int N)
{
float arrivetime = 0, servicetime = 0, starttime = 0, finishtime = 0, zztime = 0, dqzztime = 0; // Initial
Ssort (p, N); // Called Sort
Sdeal (p, arrivetime, servicetime, starttime, finishtime, zztime, dqzztime, N); // Get various times
SPrint (p, arrivetime, servicetime, starttime, finishtime, zztime, dqzztime, N); // output result
)
int main () // Main function
{
int M;
printf ("Short job priority scheduling algorithm \ n");
printf ("Number of input processes:");
scanf ("% d", & M);
Sinput (b, M );
SJF (b, M);
return 0;
}

 

Guess you like

Origin www.cnblogs.com/1314-520/p/12707044.html