一、队列有什么特点,生活中有什么例子?
队列的特点。
队列遵循(FIFO),先进先出原则的一组有序的项,队列在尾部添加新元素,并从顶部移除。
生活中的例子。
安检机器,先进先出。
二、请实现一个队列,并实现以下方法:
- enqueue(element):向队列尾部添加一个新的项。
- dequeue():移除队列的第一项,并返回被移除的元素。
- front():返回队列中第一个元素 —— 最先被添加,也将是最先被移除的元素。队列不做任何变动 (不移除元素,只返回元素信息 —— 与 Stack 类的 peek 方法类似)。
- tail():返回队列中的最后一个元素,队列不做任何变动。
- isEmpty():如果栈没有任何元素就返回 true,否则返回 false。
- size():返回队列包含的的元素个数,与数组的 length 属性类似。
- print():打印队列中的元素。
提示:Web 端优先使用 ES6 以上的语法实现。
1 | let Queue = (function () { |
三、使用队列计算斐波那契数列的第 n 项。
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:
1 | 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610... |
在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*),即前两项固定为 1,后面的项为前两项之和,依次向后**。**在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
使用示例如下:
1 | fibonacci(5); --> 5 |
1 | function fibonacci(n) { |
四、实现优先队列 PriorityQueue。
现实中优先队列的例子很多,比如机场登机的顺序,头等舱和商务舱乘客优先级高于经济舱乘客。又如在银行中办理业务时,VIP 客户的优先级高于普通客户。要实现一个优先队列,有两种方式:
- 设置优先级,然后在正确的位置添加元素。
- 用入列操作添加元素,然后按照优先级移除它们。
本题要求使用第一种方式来实现优先队列,数值越小优先级越高,若优先级相同时,先入队的元素,排在前面。
使用示例如下:
1 | let priorityQueue = new PriorityQueue(); |
1 | function PriorityQueueElement(element, priority) { |
五、用队列实现栈。
利用两个队列实现栈,栈的特点是后进先出,可以让元素入队 q1,留下队尾元素让其他元素出队,暂存到 q2 中,再让 q1 中剩下的元素出队,即最后进的最先出来。
1 |