Pagini recente » Cod sursa (job #1383790) | Cod sursa (job #326544) | Cod sursa (job #1963933) | Cod sursa (job #1775025) | Cod sursa (job #1653892)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
typedef struct PriorityQueue
{
int data;
int pri;
PriorityQueue *next;
} pQ;
class PQueue
{
public:
PQueue();
~PQueue();
void push(int, int);
int pop();
void display();
private:
pQ *head;
};
PQueue::PQueue()
{
head = NULL;
}
void PQueue::push(int d, int pri)
{
pQ *ptr = new pQ;
ptr->data = d;
ptr->pri = pri;
ptr->next = NULL;
if(head == NULL) {
head = ptr;
return;
}
pQ *cur = head;
pQ *prev = head;
while(cur) {
if(pri > cur->pri) {
if(cur == head) {
pQ *old = head;
head = ptr;
head->next = old;
return;
}
prev->next = ptr;
ptr->next = cur;
return;
}
if(cur->next == NULL) {
cur->next = ptr;
return;
}
prev = cur;
cur = cur->next;
}
}
int PQueue::pop()
{
if(head == NULL) return -1;
int val = head->data;
pQ *old = head;
if(head->next) {
head = head->next;
delete old;
}
return val;
}
int main() {
int n,a;
PQueue *q = new PQueue();
int mx = INT_MAX;
in >> n;
for(int i = 0; i < n; i++) {
in >> a;
q->push(a, mx-a);
//s.push(a);
}
for(int i = 0; i < n; i++) {
//out << s.top() << " ";
out << q->pop() << " ";
}
}