出列算法

时间:2015-05-26 20:10:34

标签: algorithm data-structures queue deque

编写四个O(1)时间过程,将元素插入到从数组构造的双端队列的两端插入元素。

在我的实现中,我保持了4个指针 front1,rear1,front2,rear2

您是否有其他任何指针较少且O(1)复杂度较高的算法?请解释一下。

1 个答案:

答案 0 :(得分:2)

实现双端队列有两种常用方法:

  1. Doubly linked list:您实现了一个双向链表,并保持指向列表前端和末尾的指针。在O(1)时间内插入和删除链接列表的开头/结尾很容易。
  2. 圆形动态数组:在这里,您有一个数组,它被视为圆形数组(因此index = arr.length-1和index = 0中的元素被视为相邻)。
    在此实现中,您保存" head"和" tail"的索引号。将元素添加到" head"完成索引head-1(向后移动头部),向尾部添加元素是通过将其写入索引tail+1来完成的。
    这个方法是摊销O(1),并且具有比链表实现更好的常量。然而,它不是严格的最坏情况&#34; O(1),因为如果元素的数量超过数组的大小,则需要重新分配新数组并将元素从旧数组移动到新数组。这需要O(n)时间(但需要在至少O(n)次操作之后完成),因此它是O(1)摊销分析,但仍然可以从O(n)落到<input type="checkbox" name="mailing" /> Would you like to join our mailing list ? 时间。