2015-04-05 2 views
1

Итак, я пытаюсь создать очередь приоритетов, которая принимает 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(); 
+3

Вы пробовали пошаговый код построчно в отладчике, чтобы увидеть, что это действительно то, что вы думаете, что должно делать? –

+0

Я думаю, что это как-то связано с while (q-> link! = NULL && q-> link-> priority <= priority) – George

+1

Зачем изобретать колесо? Вы могли бы просто использовать 'std :: priority_queue'? –

ответ

1

Это простой вопрос реверсирования которые вы использовали. Код

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; 
    } 
} 

Driver:

int main() 
{ 
    pQueue100 q; 
    q.insert("alpha", 0); 
    q.insert("beta", 2); 
    q.insert("gamma", 0); 
    q.insert("delta", 2); 
    q.insert("epsilon", 0); 
    q.insert("zeta", 2); 
    // correct display sequence should be: 
    // beta, delta, zeta, alpha, gamma, epsilon 
    q.display(); 
} 

Выход:

2|beta 
2|delta 
2|zeta 
0|alpha 
0|gamma 
0|epsilon 
Смежные вопросы