www.pudn.com > os.rar > LinkQueue.cpp
#include#include #include "LinkQueue.h" using namespace std; LinkQueue::LinkQueue() { } void LinkQueue::InitialQueue(LinkQueue& Q,PCBNode * ProcessTable,int processnum) { int i; for (i=0;i Setnext(NULL); Q.head=new QueueNode(); Q.head->Setnext(NULL); QueueNode* q; QueueNode* p; for (i=0;i SetID(i); p->Setnext(NULL); if (i == 0) Q.head->Setnext(p); else q->Setnext(p); q=p; } } void LinkQueue::ShowQueue(QueueNode *node,PCBNode * ProcessTable,int currentTime)//node为刚刚被调过的进程,她要派到就绪队列末尾 { cout<<"当前就绪队列中进程号:"; QueueNode *p; QueueNode *q=node->GetnextQNode(); QueueNode *flag=q; p=head->GetnextQNode(); if(p==NULL) cout<<"为空!!"; else { if(q==NULL) while(p!=NULL) { if(ProcessTable[p->GetID()].GetarriveTime()<=currentTime) cout< GetID()<<" "; p=p->GetnextQNode(); } else { while(q!=NULL) { if(ProcessTable[q->GetID()].GetarriveTime()<=currentTime) cout< GetID()<<" "; q=q->GetnextQNode(); } while(p!=flag) { if(ProcessTable[p->GetID()].GetarriveTime()<=currentTime) cout< GetID()<<" "; p=p->GetnextQNode(); } } } cout< GetnextQNode(); if(p==NULL) cout<<"为空!!"; else while(p!=NULL) { cout< GetID()<<" "; p=p->GetnextQNode(); } cout< GetnextQNode(); QueueNode *f=p; if(node==NULL) { ShowQueue(); } else { while(f->GetnextQNode()!=node && f!=NULL) { f=f->GetnextQNode(); } ShowQueue(f,ProcessTable,currentTime); } cout<