Очередь приоритета связанного списка с условиями добавления

#c

#c

Вопрос:

Я устал кодировать обычный приоритет. Теперь я хотел бы добавить в свой код еще 1 или 2 условия.

Вот мой текущий код обычного приоритета:

 void queue::addToQueueList(int newPriority, double newFare, int custID)
{
    node* newnode= new node;
    newnode->priority= newPriority;
    newnode->fare = newFare;
    newnode->cusID = custID;
    newnode->next= NULL;

    if (front == NULL || newnode->priority < front->priority)
    {

                newnode->next = front;

                front = newnode;

    }
    else
    {

                node* q = front;
        node* p;
                while (q->next != NULL amp;amp; q->next->priority <= newnode->priority)
        {   

            q=q->next;
        }


            newnode->next = q->next;
            q->next = newnode;



    }
}
  

как я могу добавить в пример условия добавления, если найден тот же приоритет, сравните стоимость проезда. приоритетным будет наивысший тариф.

Спасибо

Комментарии:

1. Два шага: во-первых, извлеките одну функцию bool compare(node constamp; n1, node constamp; n2) из существующего кода, она должна возвращать n1 , должна ли быть раньше n2 . Затем расширьте эту функцию, чтобы учитывать стоимость проезда, когда два элемента имеют одинаковый приоритет, что, я полагаю, является тем, что вы хотите. Кроме того, у вас должен быть набор тестов, которые гарантируют, что вещь ведет себя так, как ожидалось. Я не даю никаких дополнительных подсказок, потому что это подозрительно похоже на домашнее задание, но, используя эту информацию плюс некоторые усилия самостоятельно, вы сможете решить эту проблему.

2. Пожалуйста, отформатируйте и сделайте отступ в своем коде.

3. Привет, Ульрих Экхардт, спасибо .. =)

4. для «Гонок на орбите»: я считаю, что все здесь, чтобы помогать друг другу учиться. поэтому я надеюсь, что вы сможете дать более конструктивные комментарии, а не давать неясные отзывы. Спасибо.

Ответ №1:

Если я правильно понял, вам нужно следующее

 #include <utility>

//...

void queue::addToQueueList(int newPriority, double newFare, int custID)
{
    node* newnode= new node;
    newnode->priority= newPriority;
    newnode->fare = newFare;
    newnode->cusID = custID;
    newnode->next= NULL;

    auto p = std::make_pair( newPriority, newFare );

    if (front == NULL || p < std::make_pair( front->priority, front->fare ) )
    {

                newnode->next = front;

                front = newnode;

    }
    else
    {

                node* q = front;
                while (q->next != NULL amp;amp; 
                       std::make_pair( q->next->priority, q->next->fare ) <= p)
        {   

            q=q->next;
        }


            newnode->next = q->next;
            q->next = newnode;



    }
}
  

Также кажется, что утверждение

         node* p;
  

может быть удален из функции.

Ответ №2:

Это то, что я сделал:

 void queue::addToQueueList(int newPriority, double newFare, int custID)
{
    node* newnode= new node;
    newnode->priority= newPriority;
    newnode->fare = newFare;
    newnode->cusID = custID;
    newnode->next= NULL;

    if (front == NULL || newnode->priority < front->priority)
    {

                newnode->next = front;

                front = newnode;

    }
    else
    {

                node* q = front;
        node* p;
                while (q->next != NULL amp;amp; q->next->priority <= newnode->priority)
        {   
            p=q;
            q=q->next;
        }

            bool chk = compare(q,newnode);
        if(chk)
        {
            p->next = newnode;
            newnode->next = q;

        }
        else
        {
            newnode->next = q->next;
            q->next = newnode;
        }       


    }
}
bool queue::compare(node* constamp; n1, node* constamp; n2)
{
    bool check = false;
    if(n1->priority == n2->priority)
    {
        if(n2->fare > n1->fare)
        {
            check = true;
        }
    }
    return check;
}