Javascript 中的 PriorityQueue 类

front end technologyweb developmentjavascript

以下是 PriorityQueue 类的完整实现 −

示例

class PriorityQueue {
   constructor(maxSize) {
      // 如果未提供,则设置默认最大大小
      if (isNaN(maxSize)) {
         maxSize = 10;
       }
      this.maxSize = maxSize;
      // 初始化一个包含队列值的数组。
      this.container = [];
   }
   // 开发时显示所有值的辅助函数
   display() {
      console.log(this.container);
   }
   // 检查队列是否为空
   isEmpty() {
      return this.container.length === 0;
   }
   // 检查队列是否已满
   isFull() {
      return this.container.length >= this.maxSize;
   }
   enqueue(data, priority) {
      // 检查队列是否已满
      if (this.isFull()) {
         console.log("Queue Overflow!");
         return;
      }
      let currElem = new this.Element(data, priority);
      let AddedFlag = false;
      // 由于我们想要将元素添加到末尾,因此我们只需推送它们即可。
      for (let i = 0; i < this.container.length; i++) {
          if (currElem.priority < this.container[i].priority) {
            this.container.splice(i, 0, currElem);
            AddedFlag = true; break;
           }
      }
      if (!addedFlag) {
         this.container.push(currElem);
      }
   }
   dequeue() {
   // 检查是否为空
   if (this.isEmpty()) {
      console.log("Queue Underflow!");
      return;
   }
   return this.container.pop();
}
peek() {
   if (isEmpty()) {
      console.log("Queue Underflow!");
      return;
   }
   return this.container[this.container.length - 1];
}
clear() {
   this.container = [];
   }
}
// 创建一个内部类,我们将使用它来在队列中创建新节点
// 每个元素都有一些数据和一个优先级
PriorityQueue.prototype.Element = class {
   constructor(data, priority) {
      this.data = data;
      this.priority = priority;
   }
};

相关文章