【问题标题】:What is the purpose of maintaining rear in a dynamic queue?在动态队列中保持后方的目的是什么?
【发布时间】:2017-12-20 16:33:14
【问题描述】:

理解为什么我们需要在静态队列中维护一个尾部,但为什么需要在动态队列中维护一个尾部,我知道它使编程更容易并降低了时间复杂度(b/c 较小的循环是必需的) 但是我们也应该在单链表中保持一个尾部。

【问题讨论】:

  • 如果此问题与语言无关,则不应使用语言标签。
  • 抱歉标记错误的语言,我的问题不是关于链表,而是关于动态队列的一般结构,为什么我们需要一个前后端才能完成整个功能仅靠后方。
  • 我误读了这个问题。最后一句话质疑单链表让我失望。
  • @Haider Imtiaz 为什么你会得出这个结论“但是我们也应该在单链表中保持一个尾部。”?!
  • 我的观点是,如果队列中的尾部使编程更容易并降低时间复杂度,为什么不将其也保留在单链表中。

标签: queue


【解决方案1】:

队列的操作之一是将元素添加到队列的末尾(后部):入队操作。保持对队列尾部的引用允许在恒定时间内实现入队操作(尽管可能存在其他复杂性来源,具体取决于用作队列基础的较低级别数据结构的类型)。

我知道它使编程更容易并降低了时间复杂度......但是我们也应该在单链表中保持一个尾部。

单链表不需要提供入队操作,因此不需要维护后指针。

但是,如果需要,可以使用后指针来扩充单链表。

【讨论】:

  • 单链表不提供与 enqueue 相同的 InsertAtEnd 函数吗?
  • 你可以提供任意数量的你喜欢的操作,但是“规范”的最小单链表不需要这样的操作。
【解决方案2】:

可以理解为什么我们需要在静态队列中保持一个尾部但是 为什么要在动态队列中保持一个后方

出于同样的原因。根据队列概念的定义,新元素被添加到一侧,旧元素从另一侧排出。

...但是我们也应该在单链表中保持一个尾部。

队列和单链表之间没有逻辑关系。队列可以由任何支持从相反侧推送和弹出操作的带下划线的容器来实现。

如果你想使用单链表作为带下划线的容器,那么确实应该使用双面单链表来提高操作效率。

单面单链表比队列更适合模拟堆栈。

【讨论】:

  • 动态队列是单链表的子集,入队和出队功能同InsertAtEnd和DeleteAtStart(都是单链表的功能)。
  • @HaiderImtiaz 你写的是愚蠢的,仅此而已。
  • @HaiderImtiaz 如果您想在列表末尾添加新元素,您必须找到列表的末尾是否与您一样是说静态的还是动态的。而且这种操作显然效率低下。
  • 我的陈述哪一部分是愚蠢的,你看不懂这个问题,
  • 如果你不能理解这个问题,不要抨击它说它的愚蠢。你写的答案已经在里面了。
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 2013-01-22
  • 2011-11-13
  • 2018-09-27
  • 2021-11-11
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多