Итак, я пытаюсь создать очередь приоритетов, которая принимает 2 числа (0 и 2). Значения с приоритетом 0 должны быть добавлены в конце очереди в зависимости от времени прибытия. Приоритет 2 должен быть вставлен перед приоритетом 0 пакетов, но не впереди уже поставленных в очередь пакетов приоритетов. без использования std :: priority_queue, пожалуйста. Также необходимо использовать Linked-Lists. Может ли кто-нибудь указать, что я делаю неправильно? Образец пакета (жирным шрифтом является приоритетным):Priority Queue не сортировка в правильном порядке
55555555555555D507E34B17887100A0FF1822198100 100000663727970746fC704DD7B
pQueue100::pQueue100(){
front = NULL;
}
void pQueue100::insert(string packet, int priority)
{
node2 *temp, *q;
temp = new node2;
temp ->info= packet;
temp ->priority = priority;
if (front == NULL ||priority <front->priority)
{
temp->link =front;
front = temp;
}else
{
q = front;
while (q->link != NULL && q->link->priority<=priority)
q=q->link;
temp->link = q->link;
q->link=temp;
}
//display();
}//insert
void pQueue100::display()
{
node2 *ptr;
ptr = front;
//node2 *temp;
//temp = front;
if (front ==NULL)
cout << "Queue is empty" <<endl;
else
{
while (ptr != NULL)
{
ptr->priority;
//temp->info;
cout << ptr->priority << "|" ;
cout << ptr->info <<endl;
ptr = ptr->link;
}
}
}
Если вы, ребята, хотите, чтобы увидеть, где пакеты поступают из:
void thr1::selectPQueue(string packet){ //reads in packets from FIFO Queue and sorts it based on VLAN Tag and priority
pQueue100 p100;
// cout <<packet <<endl;//print packets for testing
if (packet.substr(45,3) == "100"){ //if the packet matches VLAN 100....
if (packet.substr(44,1) == "0"){
priorityCode = 0;
}else if (packet.substr(44,1) == "2"){
notif = "!!!!!!!!!Priority Packet Packet Found: <..." + packet.substr(16,11) + "...> !!!!!!!!!";
priorityCode = 2;
packetCopy = packet;
//thr2.interupptHandler(packetCopy, notif);
}else
priorityCode = priorityCode;
p100.insert(packet, priorityCode);
}//end VLAN 100
else if (packet.substr(45,3) =="101") //if the packet matches VLAN 101
{
if (packet.substr(44,1) == "0"){
priorityCode = 0;
}else if (packet.substr(44,1) == "2"){
notif = "!!!!!!!!!Priority Packet Packet Found: <..." + packet.substr(16,11) + "...> !!!!!!!!!";
priorityCode = 2;
packetCopy = packet;
//thr2.interupptHandler(packetCopy, notif);
}else
priorityCode = priorityCode;
//pQ101().recieveInterrupts(packet, priority,);
}//end VLAN 101
//p100.display();
Вы пробовали пошаговый код построчно в отладчике, чтобы увидеть, что это действительно то, что вы думаете, что должно делать? –
Я думаю, что это как-то связано с while (q-> link! = NULL && q-> link-> priority <= priority) – George
Зачем изобретать колесо? Вы могли бы просто использовать 'std :: priority_queue'? –