⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 www.cpp

📁 操作系统的最高响应比调度算法和优先级调度算法!
💻 CPP
字号:
#include<iostream>
using namespace std;
	struct Node{
		Node *pNext;
		char name;
		int starttime;
		int ytime;       //运行时间
		int level;//进程的优先级
	};
      
 Node*Add(Node*pHead){
int mark=1;
	cout<<"请输入进程队列!";
	while(mark==1)
	{
		Node *p,*q;
		p=new Node;
		cout<<"\n添加进程:\n"<<"  进程名:";
		cin>>p->name;
		cout<<"提交时间:";
		cin>>p->starttime;
		cout<<"运行时间:";
		cin>>p->ytime;
		cout<<"  优先级:";
		cin>>p->level;
		p->pNext=NULL;
		if(pHead==NULL)
			pHead=p;
		else
		{
			q=pHead;
			while(q)
			{
				if((q->pNext!=NULL)&&(p->starttime>=q->pNext->starttime))
					q=q->pNext;
				else
					break;
			}
			if(q==pHead&&q->starttime>p->starttime)
			{
				pHead=p;
			    p->pNext=q;
			}
			else
			{	
				p->pNext=q->pNext;
				q->pNext=p;
			}

		}
        cout<<"继续添加(YES-1,No-0):";
		cin>>mark;
	}
	return pHead;
	}
void compare(Node*pHead){
	Node *p=pHead;
	Node *flag=NULL;
	Node *q=NULL;
	int time;
	Node *p1=p;

//测试
	Node *s=pHead;
	cout<<"生成的进程链表如下:\n";
	while(s)
	{
		cout<<"["<<s->name<<","<<s->starttime<<","<<s->ytime<<","<<s->level<<"]\n";
		s=s->pNext;
	}



	int m;
	cout<<"请选择算法:0-优先级调度算法;1-最高响应比优先算法"<<endl;
	cin>>m;
	if(m==1){                        //最高响应比算法
		double j=0,i=0;
		time=p->starttime;
		while(pHead)
		{
			q=pHead;
			if(time<p->starttime)
				time=p->starttime;
			flag=pHead;
			while(q&&q->starttime<=time)
			{
				if((time-q->starttime)/(q->ytime)>(time-flag->starttime)/(flag->ytime)){
					flag=q;
					j=(time-flag->starttime)/flag->ytime;
				}
				q=q->pNext;
			}
		cout<<"进程名为:"<<flag->name<<endl;
		cout<<"进程开始时间为:"<<time<<endl;
		cout<<"进程运行时间为:"<<flag->ytime<<endl;
		cout<<"进程的优先级为:"<<flag->level<<endl;
		i+=(time-flag->starttime+flag->ytime);
		time+=flag->ytime;
		
		if(flag==pHead)
			pHead=pHead->pNext;
		else{
			p1=pHead;
			while(p1->pNext!=flag)
				p1=p1->pNext;
			p1->pNext=flag->pNext;
			delete flag;
			}
		}
		cout<<"周转时间:"<<i<<endl;
	}
	else                               //优先级调度算法
	{
		time=p->starttime;
		double n=0;
		while(pHead)
		{
			q=pHead;
			if(time<p->starttime)
				time=p->starttime;
			flag=pHead;
			while(q&&q->starttime<=time)
			{
				if(q->level>flag->level)
					flag=q;
				q=q->pNext;
			}
		cout<<"进程名为:"<<flag->name<<endl;
		cout<<"进程开始时间为:"<<time<<endl;
		cout<<"进程运行时间为:"<<flag->ytime<<endl;
		cout<<"进程的优先级为:"<<flag->level<<endl;
		n+=(time-flag->starttime+flag->ytime);
		time+=flag->ytime;
		if(flag==pHead)
			pHead=pHead->pNext;
		else{
		p1=pHead;
		while(p1->pNext!=flag)
			p1=p1->pNext;
		p1->pNext=flag->pNext;
		delete flag;
		}



	}
			cout<<"周转时间:"<<n<<endl;
}
	}
int main(){
	int i=0;
	Node*pHead=NULL;                              
	
	pHead=Add(pHead);
	
	compare(pHead);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -