標(biāo)題: 電梯調(diào)度算法(源代碼) [打印本頁]
作者: lulu25846 時間: 2016-4-26 09:11
標(biāo)題: 電梯調(diào)度算法(源代碼)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct _proc
{
char name[32]; /*定義進(jìn)程名稱*/
int team; /*定義柱面號*/
int ci; /*定義磁道面號*/
int rec; /*定義記錄號*/
struct _proc *prior;
struct _proc *next;
}PROC;
PROC *g_head=NULL,*g_curr=NULL,*local;
int record=0;
int yi=1;
void init()
{
PROC *p; /*初始化鏈表(初始I/O表)*/
g_head = (PROC*)malloc(sizeof(PROC));
g_head->next = NULL;
g_head->prior = NULL;
p = (PROC*)malloc(sizeof(PROC));
strcpy(p->name, "P1");
p->team=100;
p->ci=10;
p->rec=1;
p->next = NULL;
p->prior = g_head;
g_head->next = p;
g_curr=g_head->next;
p = (PROC*)malloc(sizeof(PROC));
strcpy(p->name, "P2");
p->team=30;
p->ci=5;
p->rec=5;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=p;
p = (PROC*)malloc(sizeof(PROC));
strcpy(p->name, "P3");
p->team=40;
p->ci=2;
p->rec=4;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=p;
p = (PROC*)malloc(sizeof(PROC));
strcpy(p->name, "P4");
p->team=85;
p->ci=7;
p->rec=3;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=p;
p = (PROC*)malloc(sizeof(PROC));
strcpy(p->name, "P5");
p->team=60;
p->ci=8;
p->rec=4;
p->next = NULL;
p->prior = g_curr;
g_curr->next = p;
g_curr=g_head->next;
local = (PROC*)malloc(sizeof(PROC)); /*選中進(jìn)程*/
strcpy(local->name, "P0");
local->team=0;
local->ci=0;
local->rec=0;
local->next=NULL;
local->prior=NULL;
}
void PrintInit() /*打印I/O表*/
{
PROC *t = g_head->next;
printf("-------------------------------------\n");
printf(" ---------I/O LIST---------\n");
printf(" process team ci rec \n");
while(t!=NULL)
{
printf("%4s %8d %8d %5d\n", t->name, t->team, t->ci, t->rec );
t = t->next;
}
printf("\n\nCurrent process is :\n");
printf("------------------------------\n\n");
printf(" process team ci rec \n");
printf("%4s %8d %8d %5d\n", local->name, local->team, local->ci, local->rec );
switch(yi)
{
case 1:{printf("current direction is UP\n");break;}
case 0:{printf("current direction is down\n");break;}
}
}
void acceptreq() /*接受請求函數(shù)*/
{
PROC *p;
p = (PROC*)malloc(sizeof(PROC));
printf("please input the information of the new process\nprocess-name:\nprocess-team\nprocess-ci\nprocess-rec\n");
printf("1.name\n");
scanf("%s",p->name);
printf("2.team 0-199\n");
scanf("%d",&p->team); /*輸入請求進(jìn)程信息*/
printf("3.ci 0-19\n");
scanf("%d",&p->ci);
printf("4.rec 0-7\n");
scanf("%d",&p->rec);
getchar();
g_curr=g_head; /*將此節(jié)點鏈入I/O請求表*/
while(g_curr->next!=NULL)
g_curr=g_curr->next;
p->next=NULL;
p->prior=g_curr;
g_curr->next=p;
g_curr=g_head->next;
printf("NEW I/O LIST\n\n");
PrintInit(); /*將新的I/O請求表輸出*/
}
void qddd() /*驅(qū)動調(diào)度函數(shù)*/
{
PROC *out;
int min;
int max=g_head->next->team;
if (g_head->next==NULL); /*若已全部調(diào)度,則空操作*/
else
{
switch (yi)
{
case 1:
{
min=g_head->next->team;out=g_head->next; /*選出最小的team進(jìn)程,模擬啟動此進(jìn)程*/
strcpy(local->name,out->name);
local->team=out->team;
local->ci=out->ci;
local->rec=out->rec;
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (g_curr->team > record)
{ min = g_curr->team;break;}
}
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (min>=g_curr->team&&g_curr->team>record)
{
min=g_curr->team;
out=g_curr;
strcpy(local->name,out->name);
local->team=out->team;
local->ci=out->ci;
local->rec=out->rec;
}
}
printf("\n-----------------------\n");
printf("the process choosed :\n");
printf(" process team ci rec \n");
printf("%4s %8d %8d %5d\n", out->name, out->team, out->ci,out->rec );
record = local->team;
printf("%d",record);
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (max<g_curr->team)
max=g_curr->team;
}
if(max==record)
{
yi=0;
record=1000;
break;
}
break;
}/*case 1*/
case 0: /*case 1 的對稱過程*/
{
max=g_head->next->team;out=g_head->next;
strcpy(local->name,out->name);
local->team=out->team;
local->ci=out->ci;
local->rec=out->rec;
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (g_curr->team < record)
{ max = g_curr->team;break;}
}
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (max<=g_curr->team&&g_curr->team<record)
{
max=g_curr->team;
out=g_curr;
strcpy(local->name,out->name);
local->team=out->team;
local->ci=out->ci;
local->rec=out->rec;
}
}
printf("\n-----------------------\n");
printf("the process choosed :\n");
printf(" process team ci rec \n");
printf("%4s %8d %8d %5d\n", out->name, out->team, out->ci,out->rec );
min=g_head->next->team;
for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)
{
if (min>g_curr->team)
min=g_curr->team;
}
record = local->team;
if(min==record)
{
yi=1;
record=0;
break;
}
break;
}
default : return -1;
}/*switch*/
if (out->next==NULL) /*將選中的進(jìn)程從I/O請求表中刪除*/
{
out->prior->next=NULL;
free(out);
}
else
{
out->prior->next=out->next;
out->next->prior=out->prior;
free(out);
}
}/*else*/
}
void acceptnum() /*通過輸入0~1選擇‘驅(qū)動調(diào)度’或是‘接受請求’*/
{
float num;
char c;
while(1)
{
printf("----------------------------------------------\n");
printf("please input a number between 0 and 1\nnum<=0.5:accept request\nnum>0.5:qudong diaodu\n\nnum==2:I/O LIST\n\nnum=?\n");
scanf("%f",&num);
getchar();
while((num<0||num>1)&&num!=2) /*過濾不合法數(shù)據(jù) 注意:本程序其他輸入數(shù)據(jù)可能未過濾*/
{
printf("number ERROR!Input again please!\nnum=?\n ");
scanf("%f",&num);
getchar();
}
if(num>0.5&&num!=2) /*驅(qū)動調(diào)度*/
{
if (g_head->next==NULL)
{
printf("\n\n");
printf("---------------------\n");
printf("I/O list is empty!!!\n"); /*請求表為空 無需調(diào)度*/
}
else
{
printf("qudong diaodu\n");
qddd();
/*調(diào)用函數(shù)進(jìn)行調(diào)度*/
}
}
else if (num<=0.5) /*接受請求*/
{
printf("accept request\n\n");
acceptreq();
}
else if (num==2) /*通過輸入2顯示當(dāng)前請求I/O表*/
{
printf("I/O LIST;");
printf("-------------------\n");
PrintInit();
printf("\n");
}
printf("-----------------------\n");
printf("choose 'n' to quit else to continue\n"); /*輸入n離開本程序*/
if(strcmp(c=getchar(),'n')==0||strcmp(c=getchar(),'N')==0)
{
//clrscr();
printf("\n\n\n\n\n\n");
printf("thank you for testing my program!\n");
printf(" ---by 01\n");
sleep(2);
printf("\n\nBYEbye!!");
sleep(2);
return -1;
}
else
{
//clrscr();
}
}
}
main () /*主程序*/
{
init();
PrintInit();
acceptnum();
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲网站在线
|
一级国产片
|
午夜国产在线观看
|
国产成人精品一区二区三区福利
|
欧美日韩国产中文
|
天堂中文av
|
国产成人小视频
|
亚洲一区二区三区视频
|
色婷婷狠狠
|
日韩欧美自拍
|
欧美久久综合
|
日批视频免费在线观看
|
日韩欧美激情
|
久久国产一区
|
成人免费网站
|
伊人在线视频
|
日韩在线观看一区
|
www.亚洲一区
|
三级在线视频
|
成人夜色
|
国产a毛片
|
欧美精品久
|
国产日韩欧美日韩大片
|
亚洲第一天堂网
|
欧美精品二区三区四区免费看视频
|
国模一区二区
|
成人免费视频一区二区
|
在线亚洲精品
|
成人永久免费视频
|
激情五月婷婷丁香
|
免费看黄色大片
|
亚洲精品一区二区在线观看
|
男人天堂手机在线
|
日本免费不卡视频
|
日本天堂在线
|
免费美女网站
|
日本久久久久久久久
|
九九精品九九
|
91丨九色丨蝌蚪丨丝袜
|
四虎影院在线
|
成人福利在线观看
|