xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 7KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-16
  • 語言: C/C++
  • 標簽:

資源簡介

⑴ 能夠選擇不同的調度算法——時間片輪轉算法和強占式短進程優先算法;⑵ 能夠輸入進程的基本信息——進程名、到達時間和運行時間等;⑶ 根據選擇的調度算法顯示進程調度隊列;⑷ 根據選擇的調度算法計算平均周轉時間和平均帶權周轉時間。

資源截圖

代碼片段和文件信息

#include
#include
using?namespace?std;

#define?QT?2//定義時間片長度為2

struct?PCB
{
string?name;//進程名
int?ta;//進程到達時間
int?ts;//進程估計運行的時間
int?tb;//進程開始運行時間
int?tm;//進程仍需運行的時間
int?to;//進程完成的時間
int?rn;//進程運行的次數
int?totalTime;//周轉時間
double?weightTotalTime;//帶權周轉時間(周轉時間/估計運行時間)
PCB?*next;//定義指向下一個進程的指針
};

int?pronum;//定義進程數為pronum
int?total;//記錄所有進程的總時間
double?weight;//記錄所有進程的帶權周轉時間

PCB?*create(PCB?*head);//創建進程隊列
void?del(PCB?*p);//刪除p的下一個節點
void?sort(PCB?*head);//將進程按到達的先后順序排列
int?getCount(PCB?*headint?time);//察看在time之前到達但未移動到運行隊列的進程數量
PCB?*searchEnd(PCB?*head);//查找并返回循壞隊列的尾節點
void?move(PCB?*headFPCB?*headTint?n);//將headF后的n個節點移動到循環隊列headT中
void?cyclerun(PCB?*head);//時間片輪轉算法
PCB?*SJF(PCB?*headint?count);//在頭節點后的count個節點中選擇需時間最小的返回
void?SJFrun(PCB?*head);//強占式短進程優先算法

void?main()
{
int?choice;
char?a;
cout<<“*進程調度模擬設計——時間片輪轉、強占式短進程優先算法*“< cout<<“***********1.時間片輪轉算法***************************“< cout<<“***********2.強占式短進程優先算法*********************“< cout<<“***********3?退出*************************************“<l1: cout<<“請輸入您的選擇:“<l2: cin>>choice;
PCB?*head=NULL;
switch(choice)
{
case?1:head=create(head);cyclerun(head);goto?l1;
case?2:head=create(head);SJFrun(head);goto?l1;
case?3:break;
default:cout<<“輸入錯誤!\n請重新輸入:“< }
}

PCB?*create(PCB?*head)
{
PCB?*p1*p2;
p1=p2=new?PCB;
head=p1;
cout<<“請輸入進程數:“;
cin>>pronum;
for(int?i=0;i {
p2=p1;
p1=new?PCB;
p1->next=NULL;
cout<<“請依次輸入第“< cin>>p1->name>>p1->ta>>p1->ts;
p1->tm=p1->ts;
p1->rn=1;
total+=p1->ts;
p2->next=p1;
}
return?head;
}

void?sort(PCB?*head)//將進程按到達的先后順序排列
{
PCB?*p*q*r*s;
if(head->next!=NULL)
{
p=head->next->next;
head->next->next=NULL;
}
while(p)
{
q=p;
p=p->next;
r=head;
s=head->next;
while(s&&s->ta<=q->ta)
{
r=s;
s=s->next;
}
r->next=q;
q->next=s;
}
}

void?del(PCB?*?p)//刪除p的下一個節點
{
PCB?*tmp;
tmp=p->next;
p->next=tmp->next;
free(tmp);
}

int?getCount(PCB?*headint?time)//察看在time之前到達但未移動到運行隊列的進程數量
{
int?count=0;
PCB?*s*t;
s=head;
t=s->next;
while(t!=NULL&&t->ta<=time)
{
???s=t;
???t=t->next;?
???count++;//count記錄當前時刻到達的進程數
}
return?count;
}

PCB*?searchEnd(PCB?*head)//查找并返回循壞隊列的尾節點
{
PCB?*p*q;
p=head;
q=head->next;
while(q->next!=head)
{
???p=q;
???q=q->next;
}
return?p;
}

void?move(PCB?*headFPCB?*headTint?n)//將headF后的n個節點移動到循環隊列headT中
{
PCB?*r*s*t;
s=headF;
t=s->next;
r=t;//r記錄要移動的第一個節點
while(n>1)
{
???t=t->next;
???n--;
}
s->next=t->next;//以上完成從原隊列中摘除相關節點rt分別為第一個和最后一個節點?
s=searchEnd(headT);
t->next=s->next;
s->next=r;
}

void?cyclerun(PCB?*head)//時間片輪轉算法
{
sort(head);
int?time=0;//記錄當前時間
int?newarrive;//新到達進程數
PCB?*rhead;
rhead=new?PCB;
rhead->next=rhead;//創建新的循環鏈表,存放當前就緒隊列中的進程
PCB?*p*q;
p=rhead;
q=p->next;//q記錄當前應當運行的

評論

共有 條評論

相關資源