最高級優先調度算法

#include
struct sjf {
char name[10]; //進程名
int arrivetime; //到達時間
int servicetime;//服務時間
    int starttime; //開始時間
int finishtime;//完成時間
float zztime;//週轉時間
float dqzztime;//帶權週轉
int super;//優先級
};
sjf p[100];
void Sinput(sjf *p, int N) {


int i;
printf("輸入進程名稱,優先級,到達時間,服務時間:\n");
for (i = 0; i<N; i++) {
printf("輸入第%d進程的名稱,優先級,到達時間,服務時間:", i + 1);
scanf("%s%d%d%d", &p[i].name,&p[i].super, &p[i].arrivetime, &p[i].servicetime);
}
}
void Sprint(sjf *p, int N) {

int k;
printf("執行順序\n");
printf("%s", p[0].name);
for (k = 1; k <= N; k++) {


printf(" %s", p[k].name);
}
printf("\n進程名 \t優先級 \t到達時間    服務時間\t開始時間\t完成時間\n");
for (k = 0; k <= N-1 ; k++) {
printf("  %s       %d       %d            %d           %d               %d \n\n",
p[k].name,p[k].super, p[k].arrivetime, p[k].servicetime, p[k].starttime, p[k].finishtime);
}
}
void Ssort(sjf *p, int N) {

for (int i = 1; i < N; i++) {
for (int j = 1; j <= i; j++) {
if (p[i].super > p[j].super) {
sjf temp;
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
void Sdeal(sjf *p,int N,float arrivetime,float servicetime,float finishtime){
int k;


for(k=0;k<=N;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;
p[k].finishtime=p[k-1].finishtime+p[k].servicetime;
}
}
}
void SJF(sjf *p, int N) {
    float arrivetime=0,
servitime=0,
finishtime=0;
Ssort(p, N);
Sdeal(p,N,arrivetime,servitime,finishtime);
Sprint(p, N);
}
int main() {
int M;
printf("短作業優先調度算法\n");
printf("輸入進程數:");
scanf("%d", &M);
Sinput(p, M);
SJF(p, M);


/*Sprint(p,M);
Ssort(p,M);
Sdeal(p,M,arrivetime,servitime,finishtime);*/
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章