• 队列的应用

      1, 优先队列,
      * - 入队列时候传入参数,队列按照传入的参数进行排列

    定义优先队列

    1. /**
    2. * 队列的应用
    3. *
    4. * 1, 优先队列,
    5. * - 入队列时候传入参数,队列按照传入的参数进行排列
    6. * - 只需要修改enqueue 方法 , 按照传入的参数进行对数组的排序
    7. */
    8. // 定义优先执行队列
    9. let PriorityQueue = (function() {
    10. var _items = new WeakMap();
    11. // 定义一个类方法 - 存储对象数据 {"name", priority}
    12. function QueueElement(elem, priority) { // 定义的类
    13. // elem 数据
    14. // priority 优先级
    15. // {"name", "priority"} —— 以这样的方存储数据
    16. this.elem = elem;
    17. this.priority = priority;
    18. }
    19. return class Queue {
    20. constructor() {
    21. _items.set(this, []);
    22. };
    23. // 优先队列只需要在入栈的实现排序就行
    24. // 1. enqueue 入列
    25. enqueue(elem, priority) { // 外部传入的参数
    26. // 实例化对象 —— 进行赋值, 数据的样子 QueueElement {name, priority}
    27. var queueElement = new QueueElement(elem, priority);
    28. // adder 判断数组是否为空
    29. let adder = false;
    30. // 分析,1. 判断当前数组是否为空 2. 对数组进行排序
    31. // for循环 数组,判断循环的元素是否小于当前元素的优先级
    32. for (let i = 0; i < _items.get(this).length; i++) {
    33. if (queueElement.priority < _items.get(this)[i].priority) {
    34. // 在指定项插入 QueueElement 对象 - 数据 {"", ""}
    35. _items.get(this).splice(i, 0, queueElement);
    36. // adder - true 数组不为空
    37. adder = true
    38. break;
    39. }
    40. }
    41. // 当数组为空的时候
    42. if (!adder) {
    43. // 当数组为空的时候, 直接添加数据 - 此时的数据为一个QueueElement 对象
    44. _items.get(this).push(queueElement)
    45. }
    46. // _items.get(this).push(elem);
    47. };
    48. // 2. dequeue 出列
    49. dequeue(elem) {
    50. // 使用 shift () 移除数组最前的元素
    51. _items.get(this).shift();
    52. };
    53. //3. fnont 获取最前的元素
    54. front() {
    55. // 返回队列最前的元素
    56. return _items.get(this)[0];
    57. };
    58. // 4. 判断队列是否为空
    59. isEmpty() {
    60. return _items.get(this).length === 0;
    61. };
    62. //size 返回队列的长度
    63. size() {
    64. return _items.get(this).length;
    65. };
    66. // toString()
    67. toString() {
    68. return _items.get(this);
    69. }
    70. }
    71. })()
    1. var a = new PriorityQueue();
    2. a.enqueue('zhangsan', 4);
    3. a.enqueue('lisi', 1);
    4. a.enqueue('wangwu', 2);
    5. a.enqueue('zhaoliu', 5);
    6. // a.dequeue();
    7. console.log(a.front());
    8. console.log(a.isEmpty());
    9. console.log(a.size());
    10. console.log(a.toString());

    输出结果

    image.png