Mam za zadanie do stworzonej kolejki dwukierunkowej dodać priorytet by z przodu kolejki były liczby parzyste. Zrobiłem to dodając kolejnego ifa do funkcji add. Teraz chciałbym posortować to ale jak na razie nie mam pomysłu jak to zrobić
#include <iostream>
using namespace std;
struct elem
{
elem *next;
elem *prev;
int data;
};
struct queue
{
elem *head;
elem *tail;
elem *size;
elem *first;
};
void init(queue &q)
{
q.head = q.tail = NULL;
}
void printAscending(const queue &q)
{
elem *current;
current = q.head;
cout << "Kolejka: ";
while(current != NULL)
{
cout << current->data << ", ";
current = current->next;
}
cout << endl;
}
void printDescending(const queue &q)
{
elem *current;
current = q.tail;
cout << "Kolejka od konca: ";
while(current != NULL)
{
cout << current->data << ", ";
current = current->prev;
}
cout << endl;
}
int remove(queue &q)
{
if(q.head != NULL)
{
int value = q.head->data;
if(q.head == q.tail)
{
delete q.head;
q.head = q.tail = NULL;
}
else
{
elem *first = q.head;
q.head = q.head->next;
q.head->prev = NULL;
//cout << "del remove" << endl;
delete first;
}
return value;
}
}
void clear(queue &q)
{
if(q.head != NULL)
{
elem *current;
elem *currentNext;
current = q.head;
while(current != NULL)
{
currentNext = current->next;
//cout << "del clear" << endl;
delete current;
current = currentNext;
}
q.head = q.tail = NULL;
}
}
void add(queue &q, const int &s)
{
//cout << "new" << endl;
elem *newElem = new elem;
newElem->data = s;
if(q.head == NULL)
{
//cout << "Wstawienie - pusta" << endl;
q.head = q.tail = newElem;
newElem->prev = newElem->next = NULL;
}
else if(newElem->data%2==0)
{
newElem->next = q.head;
newElem->prev = NULL;
q.head->prev = newElem;
q.head = newElem;
}
else if(newElem->data >= q.tail->data)
{
//cout << "Wstawienie - koniec" << endl;
newElem->next = NULL;
newElem->prev = q.tail;
q.tail->next = newElem;
q.tail = newElem;
}
else if(newElem->data <= q.head->data)
{
//cout << "Wstawienie - poczatek" << endl;
newElem->next = q.head;
newElem->prev = NULL;
q.head->prev = newElem;
q.head = newElem;
}
else
{
//cout << "Wstawienie - srodek";
elem * currentNext = q.head;
elem * currentPrev;
while(newElem->data > currentNext->data)
{
currentNext = currentNext->next;
}
currentPrev = currentNext->prev;
cout << " pomiędzy " << currentPrev->data << " i " << currentNext->data << endl;
newElem->next = currentNext;
newElem->prev = currentPrev;
currentNext->prev = newElem;
currentPrev->next = newElem;
}
}
void minimum(queue &q)
{
elem *current;
current = q.head;
int mini=current->data;
while(current != NULL)
{
if(mini>current->data)
{
mini = current->data;
}
current = current->next;
}
cout<<"Minimalna wartosc to: "<<mini<<endl;
}
int main()
{
queue q;
//tworzy pustą kolejkę
init(q);
add(q, 1);
add(q, 2);
add(q, 3);
add(q, 4);
add(q, 5);
add(q, 6);
add(q, 7);
add(q, 8);
add(q, 9);
add(q, 10);
add(q, 11);
add(q, 12);
add(q, 13);
printAscending(q);
printDescending(q);
minimum(q);
clear(q);
return 0;
}