【问题标题】:Help with queue and singly linked lists?对队列和单链表有帮助吗?
【发布时间】:2011-06-12 19:28:28
【问题描述】:

我目前正在尝试理解 C++ 中的列表、堆栈和队列。我正在复习我的测试,遇到了一个问题,询问"efficiently implement a queue class using a singly linked list, with no header or tail nodes."

我有点难过,有人知道怎么做吗?

【问题讨论】:

    标签: c++ visual-studio-2010 visual-c++


    【解决方案1】:

    提示:队列通常使用循环缓冲区实现。您将如何使用单链表创建一个圈子?

    【讨论】:

    • 使用比单链表更高效的内存分配方案,这不是更复杂吗?
    • @Anders 我同意他对“循环缓冲区”的使用在这种情况下令人困惑,但他的意思是一个很好的提示——尽管它更适用于双向链表
    • 我只是说队列的“圆”概念也可以应用于单链表。 @rlc:您不需要双向链表。您可以仅使用单链表实现具有 O(1) 推送和弹出的队列。
    • 好的,所以在队列中,只要前面或后面到达数组的末尾,它就会环绕到开头,这就是您所说的“圆圈”。现在,如果没有头节点或尾节点,这会有什么不同?
    • @tehman:列表需要是一个圆圈,即最后一个节点上的下一个指针应该指向第一个节点(所以没有头或尾)。您仍然需要跟踪您在圈子中的位置,但没有像普通列表中那样明确的头尾节点。
    【解决方案2】:

    您需要跟踪指向列表中头部和尾部项的指针。

    添加新项目时,将尾项目的next指针指向新项目,然后更新尾指针。

    要从列表的前面删除一个项目,只需返回头项目,然后更新头指针。

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多