Вставка эелементов в список по убыванию приоритетов

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by -=Dem0n=-, 6 May 2017.

  1. -=Dem0n=-

    -=Dem0n=- Elder - Старейшина

    Joined:
    15 Mar 2007
    Messages:
    66
    Likes Received:
    5
    Reputations:
    0
    Привет всем,
    нужно что бы в связном списке с приоритетами элементы сохранились по убыванию приоритетов.
    У элементов есть имя, приоритет, указатель на следующий элемент.

    Когда добавляю первый элемент то понятно что его нужно просто добавить в список. Даже если есть 1 элемент то понятно: сравнить его приоритет с новым и направить указатели. Но если в списке больше элементов, как найти нужную позицию для нового?

    Так не правильно работает:(
    Code:
    char* add(PrioQueue *queue, q_elem* newElem)
    {
        if (queue->root == NULL) {//нет элементов
            queue->root = newElem;//root is new element
            newElem->next = NULL; //
        } else if (queue->root->next != NULL) {//if root has no next than compare it with new
            q_elem *temp = queue->root;
            while(temp != NULL) {//вот тут всё начинается... не знаю как тут правильно сделать
                if (temp->priority > newElem->priority) {
                    newElem->next = temp->next;
                    queue->root->next = newElem;
               
                } else if (temp->priority < newElem->priority) {
                    newElem = queue->root;
                    queue->root = newElem;
                }
                temp = temp->next;
            }
        } else if (queue->root->priority < newElem->priority) {
            newElem->next = queue->root;
            queue->root = newElem;
        } else if (queue->root->priority > newElem->priority) {
            queue->root->next = newElem;
            newElem->next = NULL;
        }
        queue->size++;
        if (newElem != NULL && queue != NULL) {
            return newElem->name;
        }
        return "NULL";
    }