在不使用STL的情况下将元素添加到队列的前面

时间:2018-05-01 03:07:37

标签: c++ algorithm data-structures linked-list queue

我正在尝试将一些元素添加到已经有其他项目的队列的前面。我的代码工作正常,但每次都会在前面添加项目。如何修改它以在前面添加后添加下一个项目。这就是我得到的:

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

1 个答案:

答案 0 :(得分:0)

注意:我不确定你要做什么,但是你可以写一个' 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>();

注意:&#34;托管/智能指针&#34;与C#/ C ++托管代码无关。这个名字简单地说有一个类(shared_ptr)可以进行某种自动管理并带走你的一些负担。