#includeiostream#includemalloc.h#includestdlib.h#includecstringusingnamespacestd;#defineOK1//成功返回OK定义为1#defineEVERFLOW-1//越界用-1#definePCBSIZE10//空闲队列初始数组空间#defineNULL0//空定义为0typedefstructPCB//定义进程结构体{charname[100];intid;//进程的序号intpriority;//进程的优先级inttime;structPCB*next;//进程指向下一个节点}PCB,*PCBList;PCBpcb[PCBSIZE];//创建pcb块,初始空间大小为10PCBListnullPcb;//空闲队列PCBListreadyPcb;//就绪队列PCBListreadyPcbtail;//就绪队列队尾指针voidInitPcb(PCBList&nullPcb);//--初始化空闲队列PCBListCreate(PCBList&nullPcb);//--//创建一个pcb进程从PCB空间申请一个空PCB,填入进程参数,创建一个pcb进程。voidInsertReadyPcb(PCBList&readyPcb,PCBList&pcb);intDelete(intid,PCBList&readyPcb,PCBList&nullPcb);//--用于销毁一个pcb进程,指定销毁队列的序列号,销毁该进程,并将它插入到空闲队列中voidPrintPCB(PCBList&readyPcb);//--就绪队列输出函数-输出就绪队列中的进程信息,以便观察创建或撤消活动的结果voidmain(){inton=0;PCBListp;intdeleteId;InitPcb(nullPcb);//给就绪队列分配空间readyPcbtail=(PCB*)malloc(sizeof(PCB));readyPcb=readyPcbtail;readyPcbtail-id=0;readyPcbtail-priority=0;readyPcbtail-time=0;readyPcbtail-next=NULL;do{/*创建程序控制界面*/cout******************************endl;;cout1.创建一个PCB进程endl;cout2.销毁运行PCB进程endl;cout3.就绪队列打印输出endl;cout4.退出系统endl;cout******************************endl;cinon;//设置开关按钮switch(on){case1:p=Create(nullPcb);InsertReadyPcb(readyPcb,p);break;//执行创建PCB进程case2:cout请输入销毁的进程的id值endl;cindeleteId;Delete(deleteId,readyPcb,nullPcb);break;case3:PrintPCB(readyPcb);break;case4:exit(0);default:cout请输入1-4之间的序号;}}while(on!=4);}voidInitPcb(PCBList&nullPcb)//初始化空闲队列{nullPcb=&pcb[0];for(inti=0;iPCBSIZE-1;i++){pcb[i].id=i;pcb[i].next=&pcb[i+1];}pcb[PCBSIZE-1].next=NULL;cout进程块初始化成功endl;}PCBListCreate(PCBList&nullPcb)//用于创建一个pcb进程{PCBListpcbP;if(nullPcb){//将空闲队列的第一个赋值给就绪队列,并将它放置在就绪队列的队尾pcbP=nullPcb;nullPcb=nullPcb-next;printf(请输入创建pcb的序号id\n);scanf(%d,&pcbP-id);printf(请输入创建它的名字\n);scanf(%s,&pcbP-name);printf(请输入它的优先级\n);scanf(%d,&pcbP-priority);printf(请输入它运行所需时间\n);scanf(%d,&pcbP-time);pcbP-next=NULL;}returnpcbP;}intDelete(intid,PCBList&readyPcb,PCBList&nullPcb)//用于销毁一个pcb进程{PCBListpcbT,pcbF;if(pcbT){while(pcbT){if(pcbT-id==id){pcbF-next=pcbT-next;pcbT-next=nullPcb;nullPcb=pcbT;printf(销毁成功\n);returnOK;}pcbT=pcbT-next;pcbF=pcbF-next;}if(!pcbT){printf(没有要删除的pcb进程\n);}}else{printf(没有要删除的pcb进程\n);}returnOK;}voidPrintPCB(PCBList&readyPcb)//打印pcb就绪序列{PCBListpcbP;printf(就绪队列中的进程,按照优先级排序的序列为:\n);printf(\t\t序号\t名字\t优先级\t运行时间\n);pcbP=readyPcb-next;while(pcbP){printf(\t\t%d\t%s\t%d\t%d\n,pcbP-id,pcbP-name,pcbP-priority,pcbP-time);pcbP=pcbP-next;}}voidInsertReadyPcb(PCBList&readyPcb,PCBList&pcb){PCBListpcbF=readyPcb;PCBListpcbT=readyPcb-next;if(pcbT){while(pcbT){if(pcbT-prioritypcb-priority){pcb-next=pcbT;pcbF-next=pcb;printf(创建成功并将进程插入到了就绪队列中了\n);return;}pcbT=pcbT-next;pcbF=pcbF-next;}if(!pcbT){pcbF-next=pcb;}}else{pcbF-next=pcb;printf(创建成功并将进程插入到了就绪队列中了\n);}}