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;iSetnext(NULL); 
	Q.head=new QueueNode(); 
	Q.head->Setnext(NULL); 
 
	 
    QueueNode* q; 
	QueueNode* p; 
	for (i=0;iSetID(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<