#include #include #include using namespace std;/***************************************************************************************************************** Question: 设计一个按优先数调度算法实现处理器调度的程序。 输入 (程序名+总运行时间+优先级),输入为 0 结束 InPut: P1 2 1 P2 3 5 P3 1 3 P4 2 4 P5 4 2 0*****************************************************************************************************************/typedef struct Node{ string name; int leval; //优先数 int time; //总运行时间 int LeftTime; //剩余运行时间 char now; //状态 R表示就绪态,E表示结束态 Node *next;}*LinkList;LinkList creat() //创建链表{ LinkList l; l=new(Node); //当结构体里面有 string 字符串类型的数据时,必须用 new 来分配空间,不能用malloc. l->next=NULL; Node *r,*s; int flag=1; r=l; while(flag) { string Name; int Time,Leval; cin>>Name; if(Name != "0"){ cin>>Time>>Leval; //每次运行进程之前确定进程的 <优先级> 和 <运行时间> s=new(Node); s->name=Name; s->time=Time; s->leval=Leval; s->LeftTime=Time; //剩余运行时间初始化为总运行时间 s->now='R'; //进程状态初始化为 R (就绪状态) r->next=s; r=s; //cout<<"Name: "< name<<" Time: "< time<<" Leval: "< leval< next=NULL; } } return l;}void order(LinkList l) //根据优先级进行排序 思路:冒泡排序{ int length=0; Node *r,*L,*p; p=l; L=l; r=l; while(r->next != NULL){ r=r->next; length++; } r=L->next; for(int i = 1;i < length;i ++){ for(int j = 0;j <= length-i; j ++){ //cout<<"r->leval: "< leval<<" L->next->leval: "< next->leval< leval > L->next->leval){ p->next=r->next; r->next=L->next; L->next=r; r=p; //注意:找到符合条件的结点时。r-next 指向了 头结点->next。 //所以重新复制为: p结点(保存的r结点) } p=r; r=r->next; } L=L->next; //这两个语句是核心! r=L->next; }}void Output(LinkList l){ Node *r; r=l; cout<<"****************************************"< next != NULL){ r=r->next; cout<<"Name:"< name<<" LeftTime:"< LeftTime<<" Leval:"< leval<<" Now:"< now<<" *"< next != NULL && r->next->LeftTime != 0){ //好坑啊!这里!如果把两个判断语句调换顺序。程序就会崩。 //理由:程序会先判断 r->next->LeftTime != 0 这个语句。 //但是最后一个结点即 r->next->LeftTime 没有空间 //因此无法判断,程序崩溃。判断语句一定要可判断的语句才可以 cout<<"当前运行的程序名为:"< next->name< next->leval --; r->next->LeftTime --; if(r->next->LeftTime == 0){ cout<<"该程序运行结束,退出进程"< next->now = 'E'; l->next=r->next->next; } cout<<"运行后的进程块为:"< 运行时间> 优先级>