priority queue with selection sort

profileeylpr.hpvilasd
priorityqueue..docx

#include <iostream>

#include <fstream>

#include <string>

#include <cstring>

using namespace std;

class Person{

public:

Person*N;

Person*P;

Person( int, string );

int getPriority(void);

string getName(void);

void printName(void);

private:

string Name;

int Priority;

};

Person::Person( int priority, string name )

:N(NULL),P(NULL)

{

Name=name;

Priority=priority;

}

int Person::getPriority()

{

return Priority;

}

string Person::getName()

{

return Name;

}

void Person::printName(void)

{

char str[100];

strncpy(str,Name.c_str(),100);

cout<<str;

}

class PQueue{

public:

PQueue( void );

bool empty( void );

int size( void );

Person* front( void );

Person* back( void );

void enqueue( Person* );

void dequeue( void );

private:

Person* frontPerson;

Person* backPerson;

int count;

};

PQueue::PQueue()

{

frontPerson=NULL;

backPerson=NULL;

count=0;

}

int PQueue::size()

{

return count;

}

bool PQueue::empty()

{

return count==0;

}

Person* PQueue:: front()

{

return frontPerson;

}

Person* PQueue:: back()

{

return backPerson;

}

void PQueue::enqueue(Person* n)

{

if(frontPerson == NULL )

{

frontPerson = n;

backPerson = n;

}

else

{

Person* temp = frontPerson;

if( n->getPriority() > temp->getPriority())

{

frontPerson->P = n;

n->N = frontPerson;

frontPerson = n;

}

else

{

while( n->getPriority() < temp->getPriority())

{

if(temp->N == NULL)

break;

temp = temp->N;

}

if(temp->N == NULL && n->getPriority()<=temp->getPriority())

{

backPerson->N = n;

n->P = backPerson;

backPerson = n;

}

else

{

temp->P->N = n;

n->P = temp->P;

n->N = temp;

temp->P = n;

}

}

}

count+=1;

}

void PQueue::dequeue()

{

while(frontPerson!=NULL)

{

Person *temp;

if(frontPerson->N == NULL)

{

Person * temp2 = frontPerson;

temp = temp2;

frontPerson = NULL;

backPerson = NULL;

delete temp2; }

else

{

Person * temp2 = frontPerson;

temp = temp2;

frontPerson= frontPerson->N;

frontPerson->P = NULL;

delete temp2;

}

cout<<"Serving ";temp->printName();cout<<"..."<<endl;

}

}

int main()

{

int rank;

string name;

ifstream fin("sample.txt",ios::in);

PQueue *p_Queue=new PQueue();

while(fin>>rank>>name)

{

Person *node=new Person(rank,name);

p_Queue->enqueue(node);

}

p_Queue->dequeue();

delete p_Queue;

fin.close();

return 0;

}