2021-01-16

实验6

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
typedef struct node {
int procID; /进程 ID/
int releaseTime; /到达时间/
int priority; /优先级/
int cpuTime; /运行时间/
int executedTime; /已运行时间/
int state; /进程状态/
int Order; /完成顺序/
struct node *next; /指向下一个进程指针/
} node;
struct node nodes[5];
void initnode() {
nodes[0].procID = 1;
nodes[1].procID = 2;
nodes[2].procID = 3;
nodes[3].procID = 4;
nodes[0].releaseTime = 0;
nodes[1].releaseTime = 1;
nodes[2].releaseTime = 2;
nodes[3].releaseTime = 4;
nodes[0].priority = 3;
nodes[1].priority = 4;
nodes[2].priority = 1;
nodes[3].priority = 2;
nodes[0].cpuTime = 4;
nodes[1].cpuTime = 3;
nodes[2].cpuTime = 5;
nodes[3].cpuTime = 4;
}
void sjf(node *p, int count) {
node item;
int i = 0;
int j = 0;
int k = 0;
int flag = 0;
float min = 0;
float temp;
temp=p[0].releaseTime;
for(i=0;i<count;i++){
nodes[i].priority=0;
}
for(i=0;i<count;i++){
if(temp>p[i].releaseTime){
temp=p[i].releaseTime;
k=i;
}
}
for(i=0;i<count;i++){
p[k].priority=++flag;
p[k].Order=p[k].priority;
min=100;
temp=p[k].cpuTime+temp;
for(j=0;j<count;j++){
if(p[j].priority!=0||temp-p[j].releaseTime<=0)

continue;
if(min>p[j].cpuTime){
min=p[j].cpuTime;
k=j;
}
}
}
for(i=1;i<count;i++){
item=p[i];
j=i-1;
while(item.priority<p[j].priority&&j>=0){
p[j+1]=p[j];
–j;
}
p[j+1]=item;
}
for(i=0;i<count;i++){
printf(“P%d:%d \n”,nodes[i].procID,nodes[i].cpuTimeTime);
}
return;
}
void psjf(node* p,int count){
node item;
int i = 0;
int j = 0;
int k = 0;
int flag = 0;
float min = 0;
float temp;
temp=p[0].releaseTime;
for(i=0;i<count;i++){
nodes[i].priority=0;
}
for(i=0;i<count;i++){
if(temp>p[i].releaseTime){
temp=p[i].releaseTime;
k=i;
}
}
for(i=0;i<count;i++){
p[k].priority=++flag;
min=100;

temp=p[k].cpuTime+temp;
for(j=0;j<count;j++){
if(p[j].priority!=0||temp-p[j].releaseTime<=0)
continue;
if(min>p[j].cpuTime){
min=p[j].cpuTime;
k=j;
}
}
}
for(i=1;i<count;i++){
item=p[i];
j=i-1;
while(item.priority<p[j].priority&&j>=0){
p[j+1]=p[j];
–j;
}
p[j+1]=item;
}
for(i=0;i<count;i++){
printf(“P%d:%d \n”,nodes[i].procID,nodes[i].cpuTime);
}
return;
}
void prio(node* p,int count){
node item;
int i,j;
for(i=0;i<count;i++){
p[i].Order=p[i].priority;
}
for(i=1;i<count;i++){
item=p[i];
j=i-1;
while(item.priority<p[j].priority&&j>=0){
p[j+1]=p[j];
–j;
}
p[j+1]=item;
}
for(i=0;i<count;i++){
printf(“P%d:%d \n”,nodes[i].procID,nodes[i].cpuTime);
}
return;
}

void pprio(node* p,int count){
node item;
int i,j;
for(i=0;i<count;i++){
p[i].Order=p[i].priority;
}
for(i=1;i<count;i++){
item=p[i];
j=i-1;
while(item.priority<p[j].priority&&j>=0){
p[j+1]=p[j];
–j;
}
p[j+1]=item;
}
for(i=0;i<count;i++){
printf(“P%d:%d \n”,nodes[i].procID,nodes[i].cpuTime);
}
return;
}
int main() {
int x;
initnode();
printf(“Please choose one :1.sjf; 2.prio; 3.psjf; 4.pprio\n”);
scanf("%d",&x);
switch (x)
{
case 1:
sjf(nodes,sizeof(nodes)/sizeof(nodes[0])-1);
break;
case 2:
prio(nodes,sizeof(nodes)/sizeof(nodes[0])-1);
break;
case 3:
psjf(nodes,sizeof(nodes)/sizeof(nodes[0])-1);
break;
case 4:
pprio(nodes,sizeof(nodes)/sizeof(nodes[0])-1);
break;
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值