JavaScript数据结构与算法之优先级队列

58 阅读1分钟
// 优先级队列
// 含有优先级参数
function PriorityQueue() {
  function QueueElement(element, priority) {
    this.element = element;
    this.priority = priority;
  }
  this.items = [];
  PriorityQueue.prototype.enqueue = (element, priority) => {
    const queueElement = new QueueElement(element, priority);
    if (!this.items.length) {
      this.items.push(queueElement);
    } else {
      let addFlag = false;
      for (let i = 0; i < this.items.length; i++) {
        if (queueElement.priority < this.items[i].priority) {
          this.items.splice(i, 0, queueElement);
          addFlag = true;
          break;
        }
      }
      if (!addFlag) {
        this.items.push(queueElement);
      }
    }
  };
  // 删除 从第一位删除
  PriorityQueue.prototype.dequeue = () => {
    return this.items.shift();
  };
  // 返回第一个元素
  PriorityQueue.prototype.front = () => {
    return this.items[0];
  };
  // 判断是否为空
  PriorityQueue.prototype.isEmpty = () => {
    return this.items.length == 0;
  };
  // 获取长度
  PriorityQueue.prototype.size = () => {
    return this.items.length;
  };
  // 返回队列中的内容,转为字符串格式
  PriorityQueue.prototype.toString = () => {
    let resultString = "";
    for (let i = 0; i < this.items.length; i++) {
      resultString +=
        this.items[i].element + "-" + this.items[i].priority + " ";
    }
    return resultString;
  };
}
const priorityQueue = new PriorityQueue();
priorityQueue.enqueue("张三", 12);
priorityQueue.enqueue("李四", 20);
priorityQueue.enqueue("王五", 120);
priorityQueue.enqueue("兆欧", 66);
priorityQueue.enqueue("八嘎", 2);
const data = priorityQueue.toString();
console.log("data", data);
console.log("priorityQueue", priorityQueue);