轮转调度算法(C语言描述)
来源:互联网 发布:淘宝买家如何开店 编辑:程序博客网 时间:2024/05/21 21:01
/*轮转调度算法*/
#include<stdio.h>
#include<malloc.h>
#define N 100
typedef struct RR{
int arivaltime;
int gotime,copytime;
int finaltime;
int time;
float dtime;
struct RR * nextRR;
}RR;
int k=0;
struct RR JC[N];
struct RR *CreatRR(int n){
struct RR * head;
struct RR * q=(struct RR *)malloc(sizeof(RR));
q->nextRR=NULL;
head=q;
for(int i=0;i<n;i++){
struct RR * p=(struct RR *)malloc(sizeof(RR));
printf("第%d个进程的到达时间:",i+1);
scanf("%d",&(p->arivaltime));
printf("第%d个进程的运行时间:",i+1);
scanf("%d",&(p->gotime));
p->dtime=0;
p->finaltime=0;
p->time=0;
q->nextRR=p;
p->copytime=p->gotime;
p->nextRR=NULL;
q=p;
}
return head;
}
struct RR * deleteQueue(struct RR * head,struct RR * n){
struct RR *p,*q;
p=head;
while(p!=n){
q=p;
p=p->nextRR;
}
if(q->nextRR==n){
q->nextRR=p->nextRR;
n->time=n->finaltime-n->arivaltime;
n->dtime=(float)n->time/n->gotime;
JC[k].arivaltime=n->arivaltime;
JC[k].gotime=n->gotime;
JC[k].finaltime=n->finaltime;
JC[k].time=n->finaltime-n->arivaltime;
JC[k].dtime=(float)JC[k].time/JC[k].gotime;
k++;
delete p;
}
return q->nextRR;
}
void Sort(struct RR a[],int n){
int m=0;
struct RR temp;
for(int i=0;i<n;i++){
m=i;
for(int j=i+1;j<n;j++){
if(a[m].arivaltime>=a[j].arivaltime){
m=j;
}
}
if(m!=i){
temp=a[m];
a[m]=a[i];
a[i]=temp;
}
}
}
int Number(struct RR * head){
int number=0;
struct RR *p;
if(head->nextRR==NULL){
return 0;
}
p=head;
while(p->nextRR){
number++;
p=p->nextRR;
}
return number;
}
int main(){
int n,dt,localtime=0,j;
struct RR * p;
struct RR * head;
printf("进程的个数:");
scanf("%d",&n);
printf("时间片大小:");
scanf("%d",&dt);
p=CreatRR(n);
head=p;
p=p->nextRR;
localtime=p->arivaltime;
printf("提交时间 服务时间 完成时间 周转时间 带权周转时间\n");
while(Number(head)&&p!=NULL){
for(j=0;j<dt;j++){
p->finaltime=localtime+1;
localtime=p->finaltime;
(p->copytime)--;
if(p->copytime==0){
p=deleteQueue(head,p);
break;
}
}
if(j<dt){
if(p==NULL){
p=head->nextRR;
}
}
else{
p=p->nextRR;
if(p==NULL){
p=head->nextRR;
}
}
}
Sort(JC,k);
for(int l=0;l<n;l++){
printf(" %2d %2d %2d %2d %.2f\n",JC[l].arivaltime,JC[l].gotime,JC[l].finaltime,JC[l].time,JC[l].dtime);
}
return 0;
}
#include<stdio.h>
#include<malloc.h>
#define N 100
typedef struct RR{
int arivaltime;
int gotime,copytime;
int finaltime;
int time;
float dtime;
struct RR * nextRR;
}RR;
int k=0;
struct RR JC[N];
struct RR *CreatRR(int n){
struct RR * head;
struct RR * q=(struct RR *)malloc(sizeof(RR));
q->nextRR=NULL;
head=q;
for(int i=0;i<n;i++){
struct RR * p=(struct RR *)malloc(sizeof(RR));
printf("第%d个进程的到达时间:",i+1);
scanf("%d",&(p->arivaltime));
printf("第%d个进程的运行时间:",i+1);
scanf("%d",&(p->gotime));
p->dtime=0;
p->finaltime=0;
p->time=0;
q->nextRR=p;
p->copytime=p->gotime;
p->nextRR=NULL;
q=p;
}
return head;
}
struct RR * deleteQueue(struct RR * head,struct RR * n){
struct RR *p,*q;
p=head;
while(p!=n){
q=p;
p=p->nextRR;
}
if(q->nextRR==n){
q->nextRR=p->nextRR;
n->time=n->finaltime-n->arivaltime;
n->dtime=(float)n->time/n->gotime;
JC[k].arivaltime=n->arivaltime;
JC[k].gotime=n->gotime;
JC[k].finaltime=n->finaltime;
JC[k].time=n->finaltime-n->arivaltime;
JC[k].dtime=(float)JC[k].time/JC[k].gotime;
k++;
delete p;
}
return q->nextRR;
}
void Sort(struct RR a[],int n){
int m=0;
struct RR temp;
for(int i=0;i<n;i++){
m=i;
for(int j=i+1;j<n;j++){
if(a[m].arivaltime>=a[j].arivaltime){
m=j;
}
}
if(m!=i){
temp=a[m];
a[m]=a[i];
a[i]=temp;
}
}
}
int Number(struct RR * head){
int number=0;
struct RR *p;
if(head->nextRR==NULL){
return 0;
}
p=head;
while(p->nextRR){
number++;
p=p->nextRR;
}
return number;
}
int main(){
int n,dt,localtime=0,j;
struct RR * p;
struct RR * head;
printf("进程的个数:");
scanf("%d",&n);
printf("时间片大小:");
scanf("%d",&dt);
p=CreatRR(n);
head=p;
p=p->nextRR;
localtime=p->arivaltime;
printf("提交时间 服务时间 完成时间 周转时间 带权周转时间\n");
while(Number(head)&&p!=NULL){
for(j=0;j<dt;j++){
p->finaltime=localtime+1;
localtime=p->finaltime;
(p->copytime)--;
if(p->copytime==0){
p=deleteQueue(head,p);
break;
}
}
if(j<dt){
if(p==NULL){
p=head->nextRR;
}
}
else{
p=p->nextRR;
if(p==NULL){
p=head->nextRR;
}
}
}
Sort(JC,k);
for(int l=0;l<n;l++){
printf(" %2d %2d %2d %2d %.2f\n",JC[l].arivaltime,JC[l].gotime,JC[l].finaltime,JC[l].time,JC[l].dtime);
}
return 0;
}
0 0
- 轮转调度算法(C语言描述)
- 操作系统轮转调度算法(c语言描述)
- 时间片轮转调度算法的C语言模拟实现
- CSCAN调度算法(C语言描述)磁盘
- 调度算法 SCAN 磁盘(C语言描述)
- 作业优先调度算法 先来先服务、短作业调度算法(c语言描述)
- 时间片轮转算法和优先级调度算法 C语言模拟实现
- 时间片轮转算法和优先级调度算法 C语言模拟实现
- 轮转调度算法(RR)
- 进程调度算法(优先数法和简单轮转法)C/C++
- 时间片轮转调度算法
- 时间片轮转调度算法
- 时间片轮转调度算法
- 时间片轮转调度算法
- 调度算法:时间轮转调度算法
- 进程调度:时间片轮转调度算法
- 时间片轮转调度算法(C++代码)
- 进程调度(二)——时间片轮转算法
- NIO中通道(Channel)
- 【Summary】——>Web组.Week4
- Struts2框架的基本使用(三)
- Nginx隐藏响应头信息的Server信息和版本信息
- JMeter学习笔记10-Graph Results介绍
- 轮转调度算法(C语言描述)
- 第六讲、软件包管理
- 使用Angular CLI创建一个Angualr4项目
- cannot find -lxxx
- [leetcode]: 463. Island Perimeter
- 《深入理解JAVA虚拟机》学习笔记(四)JAVA内存分配策略
- JSON-JAVA(org.json),GSON,FASTJSON的使用
- 简单的实现Ajax跨域请求
- [原]Redis主从复制各种环境下测试