创建双端队列(deque)

迄今为止,我们已经实现了这样的队列:一端用于查询,称为后端,另一端用于排序,称为前端。因此,一般来说,每一端都应该用于特定的目的。但如果我们需要从两端进行查询和脱机操作呢?使用双端队列或 deque 概念就可以做到这一点。在 deque 中,两端都可用于 enqueuedequeue 操作。如果我们看看使用链表实现的队列,就会发现我们可以使用链表实现在最后插入、在最先插入、在最后删除和在最先删除。如果我们在此基础上实现一个新的 deque 类,就能轻松实现我们的预期目标。下图描述了一个双端队列:

image 2023 11 07 19 44 31 993

这是双端队列的实现:

Unresolved include directive in modules/ROOT/pages/ch04/ch4-13.adoc - include::example$Chapter04/11.php[]

现在我们将使用此类来检查双端队列的操作:

Unresolved include directive in modules/ROOT/pages/ch04/ch4-13.adoc - include::example$Chapter04/11.php[]

如果我们看一下前面的代码示例,首先在前面加上 Fred,然后再在前面加上 John。因此,现在的序列是 JohnFred。然后我们在后面添加 Keith,接着在后面添加 Adiyan。所以现在的序列是约翰、弗雷德、基思、阿迪扬。最后,我们在开头加上 Mikhael。所以最后的序列是 MikhaelJohnFredKeithAdiyan

由于我们是先从后面执行 dequeue,所以 Adiyan 会先出来,然后 Mikhael 从前面出来。前台的新偷看者将是 John。下面是运行代码时的输出结果:

Adiyan
Mikhael
John

总结

栈和队列是最常用的数据结构之一。在未来的算法和数据结构中,我们可以以不同的方式使用这些抽象数据类型。在本章中,我们学习了实现堆栈和队列的不同方法,以及队列的不同类型。在下一章中,我们将讨论递归—​一种通过将更大的问题划分为更小的实例来解决这些问题的特殊方法。