实 验 报 告
显示链表 void ShowList(LinkList head) head = head->next; 在链表中删除结点 key void ClearList(LinkList head,DataType key) 删除链表 void DeleteList(LinkList head) {head=p->next; free(p); p=head;} 创建链表向就绪状态转化 void FreeToReady(LinkList FreeP,LinkList ReadyP,DataType key) {p=FreeP->next; FreeP->next=p->next; p->data=key; q=ReadyP; while(q->next) q=q->next; q->next=p; p->next=NULL;} 就绪状态向执行状态转化 void ReadyToExe(LinkList ReadyP,LinkList ExeP,DataType key) { ExeP->next=LocateNode(ReadyP,key); ClearList(ReadyP,key); ExeP->next->next=NULL; printf("Execute process %c success.\n",key); } 执行状态向就绪状态转化 void ExeToReady(LinkList ExeP,LinkList ReadyP) p=p->next; p->next=ExeP->next; ExeP->next=NULL; 阻塞状态向就绪状态转化 void BlockToReady(LinkList BlockP,LinkList ReadyP,DataType key) { LinkList p,q; p=LocateNode(BlockP,key); q=ReadyP; while(q->next) q=q->next; q->next=p; ClearList(BlockP,key); p->next=NULL; } 执行状态向阻塞状态转化 void ExeToBlock(LinkList ExeP,LinkList BlockP) {LinkList p; p=BlockP; while(p->next) p=p->next; p->next=ExeP->next; ExeP->next=NULL;
int main() { ...cmd=getchar(); switch(cmd) { case 'c': while(LocateNode(ReadyP,Name)||LocateNode(BlockP,Name) ||LocateNode(ExeP,Name)) Name=Name+1; if((LocateNode(ReadyP,Name) || LocateNode(ExeP,Name) ||LocateNode(BlockP,Name)) == NULL) FreeToReady(FreeP,ReadyP,Name); case
'P': if(LocateNode(ReadyP,Name)) ReadyToExe(ReadyP,ExeP,Name); case 'E': while(temp->next) temp=temp->next; temp->next=ExeP->next; ExeP->next=NULL; printf("End process %c success.\n",temp->next->data); case 'B': if(ExeP->next) printf("Block process %c success.\n",ExeP->next->data); else printf("Error: No process executing.\n"); case 'w': Name=getchar(); getchar(); if(LocateNode(BlockP,Name)) printf("Wakeup process %c success.\n",Name); } ... } //唤醒进程 //清空进程 //结束进程 //输入进程名 //创建进程
注:双面打印