Добавление элементов в начало очереди без использования STL - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь добавить некоторые элементы в начало очереди, в которой уже есть другие элементы. Мой код работает нормально, но каждый раз добавляет элемент впереди. Как я могу изменить его, чтобы добавить следующий элемент после того, как фронт добавил один. Вот что я получил:

void Queue::addtoFront(string first, string last){
 Node *temp = new Node(first, last, NULL);
    temp->next = head;
        head = temp;
}

1 Ответ

0 голосов
/ 01 мая 2018

Примечание : Я не уверен, чего вы пытаетесь достичь, но вы могли бы написать функцию-член insertAfter. Эта функция берет новый элемент и вставляет его сразу после указанного элемента в связанном списке.

Для этого необходимо сначала установить ссылку «следующий» для нового элемента, а затем вставить новый элемент сразу после запрошенного элемента.

void Queue::insert(Node *newElement, Node *insertAfter)
{
    _ASSERT(insertAfter != nullptr);
    _ASSERT(newElement != nullptr);
    // set the 'next' of the new element to the 'next' of the insertAfter
    newElement->next = insertAfter->next;
    // now insert the new element immediately after the 'insertAfter'
    insertAfter->next = newElement;
}

// Taken from the original post...
// Of course, "addToFront" is no longer the correct name for this function,
// since it does no longer add the element to the front
void Queue::addToFront(...)
{
    if (head==nullptr) {
        // see original post above
    } else {
        // insert new element at the 2nd position in the queue,
        // immediately behind the head
        insert(temp, head);
    }
}

Для дальнейшего изучения вы можете прочитать о связанных списках и взглянуть на интерфейс std :: list. Возможно, вы захотите улучшить свой код с помощью shared_ptr / unique_ptr вместо использования Node *. В современном C ++ вы бы почти никогда не использовали

Node *element=new Node();

В большинстве случаев это просто плохой код. Самостоятельное управление указателями и временем жизни объекта приглашение на всевозможные неприятные проблемы (утечки памяти, нарушения доступа, проблемы мелкого и глубокого копирования, неспособность освободить объекты, особенно после исключений и т.д ...). Использование управляемых или умных указателей значительно облегчит вашу жизнь:

shared_ptr<Node> element(new Node());
// or even better
shared_ptr<Node> element=std::make_shared<Node>();

Примечание: «управляемые / умные указатели» не имеют ничего общего с управляемым кодом C # / C ++. Название просто говорит о том, что существует класс (shared_ptr), который выполняет какое-то автоматическое управление и берет на себя часть вашего бремени.

...