js中的数据与算法-队列和双端队列

61 阅读2分钟

队列是遵循先进先出(FIFO,也称为先来先服务)原则的一组有序的项。队列在尾部添加新 元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。

队列和栈一样也有两种实现,一种是基于数组,另一种基于链表。使用数组实现的队列,我们称为“顺序队列”;使用链表实现的队列,我们称为“链式队列”。

创建Queue 类,实现内部方法:

(1)enqueue(element(s)):向队列尾部添加一个(或多个)新的项。

(2)dequeue():移除队列的第一项(即排在队列最前面的项)并返回被移除的元素。

(3)peek():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不做 任何变动(不移除元素,只返回元素信息——与 Stack 类的 peek 方法非常类似)。该方 法在其他语言中也可以叫作 front 方法。

(4)isEmpty():如果队列中不包含任何元素,返回 true,否则返回 false。

(5)size():返回队列包含的元素个数,与数组的 length 属性类似。

双端队列(deque,或称 double-ended queue)是一种允许我们同时从前端和后端添加和移除元素的特殊队列。能基于数组以及链表实现方法。

创建Deque类,实现其内部方法:

(1)addFront(element):该方法在双端队列前端添加新的元素。

(2)addBack(element):该方法在双端队列后端添加新的元素(实现方法和 Queue 类中的 enqueue 方法相同)。

(3)removeFront():该方法会从双端队列前端移除第一个元素(实现方法和 Queue 类中的 dequeue 方法相同)。

(4)removeBack():该方法会从双端队列后端移除第一个元素(实现方法和 Stack 类中的 pop 方法一样)。

(5)peekFront():该方法返回双端队列前端的第一个元素(实现方法和 Queue 类中的 peek 方法一样)。

(6)peekBack():该方法返回双端队列后端的第一个元素(实现方法和 Stack 类中的 peek 方法一样)。

循环队列是一个环状队列,简单来说就是队头位置和队尾位置认为是相连的,整体看起来就像个圆环。循环队列只能基于数组实现,因为链表的尾结点连接头结点的结构叫做“循环链表”了。