久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2365|回復: 0
打印 上一主題 下一主題
收起左側

電梯調度算法(源代碼)

[復制鏈接]
跳轉到指定樓層
樓主
ID:116719 發表于 2016-4-26 09:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct _proc
{
char name[32];           /*定義進程名稱*/
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));             /*選中進程*/
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()                        /*接受請求函數*/
{
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);                    /*輸入請求進程信息*/
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;                       /*將此節點鏈入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()                         /*驅動調度函數*/
{
PROC *out;
int min;
int max=g_head->next->team;
if (g_head->next==NULL);            /*若已全部調度,則空操作*/
else
{
switch (yi)
{
case 1:
   
{
min=g_head->next->team;out=g_head->next;          /*選出最小的team進程,模擬啟動此進程*/
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)                      /*將選中的進程從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選擇‘驅動調度’或是‘接受請求’*/
{
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)                /*過濾不合法數據 注意:本程序其他輸入數據可能未過濾*/
{
printf("number ERROR!Input again please!\nnum=?\n ");
scanf("%f",&num);
getchar();
}
if(num>0.5&&num!=2)                         /*驅動調度*/
{
if (g_head->next==NULL)
{
printf("\n\n");
printf("---------------------\n");
printf("I/O list is empty!!!\n");           /*請求表為空 無需調度*/
}
else
{
printf("qudong diaodu\n");
qddd();
                                 /*調用函數進行調度*/
}
}
else if (num<=0.5)                          /*接受請求*/
{
printf("accept request\n\n");
acceptreq();
}
else if (num==2)                           /*通過輸入2顯示當前請求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();
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99国产精品一区二区三区 | 欧美日韩中文字幕 | 国产内谢 | 亚洲不卡在线观看 | 91直接看| 久久99精品久久久久久 | 成人欧美一区二区三区白人 | 久久视频免费观看 | 99精品欧美一区二区三区 | 九色视频网 | 日本久久网| 91精品国产色综合久久 | 国产高清一区二区 | 黄色网络在线观看 | 一区二区在线免费播放 | 精品国产乱码久久久久久蜜退臀 | 成年人黄色小视频 | 国产精品成人一区二区三区吃奶 | 婷婷丁香在线视频 | 免费在线观看黄色av | 秋霞a级毛片在线看 | 在线观看涩涩视频 | 国产精品激情小视频 | 81精品国产乱码久久久久久 | 国产精品久久久久久久久久久免费看 | 亚洲福利网站 | 久草日韩 | 国产视频1区| 久久成人av| 欧美日韩在线高清 | 99久久精品视频免费 | 国产黄色在线观看 | 亚洲国产精品久久久久婷婷老年 | www.99re| 欧美freesex黑人又粗又大 | 狠狠婷婷综合久久久久久妖精 | 黄色片在线免费看 | 国产精品国产三级国产aⅴ中文 | 国产91精品久久久久久久网曝门 | 欧美日韩综合视频 | 伊人精品|