• Queue 队列
    1. enqueue 入列
      2. dequeue 出列
      3. front 获取最前的元素
      4. isEmpty 判断队列是否为空
      5. size 返回队列的长度

队列基于数组,原生使用也是数组的方法。 队列就像 排队一样, 先进先出, 后进后出

image.png

定义队列

定义队列基本和栈一样,使用 立即执行函数, 和 使用了 WeakMap 的弱引用

  1. /**
  2. * Queue 队列
  3. *
  4. * 1. enqueue 入列
  5. * 2. dequeue 出列
  6. * 3. front 获取最前的元素
  7. * 4. isEmpty 判断队列是否为空
  8. * 5. size 返回队列的长度
  9. */
  10. let Queue = (function() {
  11. // 创建 WeakMap 的实例
  12. var _items = new WeakMap();
  13. // 返回队列的类
  14. return class Queue {
  15. constructor() {
  16. // 定义存放数据的数组
  17. _items.set(this, []);
  18. };
  19. // 在类中定义队列的方法
  20. // 1. enqueue 入列
  21. enqueue(elem) {
  22. // 往数组添加元素
  23. _items.get(this).push(elem);
  24. };
  25. // 2. dequeue 出列
  26. dequeue(elem) {
  27. // 使用 shift () 移除数组最前的元素
  28. _items.get(this).shift();
  29. };
  30. //3. fnont 获取最前的元素
  31. front() {
  32. // 返回队列最前的元素
  33. return _items.get(this)[0];
  34. };
  35. // 4. 判断队列是否为空
  36. isEmpty() {
  37. return _items.get(this).length === 0;
  38. };
  39. //size 返回队列的长度
  40. size() {
  41. return _items.get(this).length;
  42. };
  43. // toString()
  44. toString() {
  45. return _items.get(this);
  46. }
  47. }
  48. })()
  49. var a = new Queue();
  50. // 入列
  51. a.enqueue(1);
  52. a.enqueue(2);
  53. a.enqueue(3);
  54. a.enqueue(4);
  55. // 出列
  56. a.dequeue(1);
  57. console.log(a.front());
  58. console.log(a.isEmpty());
  59. console.log(a.size());
  60. console.log(a.toString());

输出结果
image.png