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; } };