priority queue with selection sort
#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;