javascript - 在javascript中更新队列的优先级
问题描述
- 在 hasValue 类中,为什么 return 不起作用?当我尝试使用 console.log 和 alert 时,它起作用了。
- 想要实现类似priorityQueue.changePriority("Sheru", 1); changePriority 类不起作用。注释代码是我试图实现更改的代码,即我想更改队列中现有项目的优先级。有人可以帮忙吗?
class QElement {
constructor(element, priority) {
this.element = element;
this.priority = priority;
}
}
class PriorityQueue {
constructor() {
this.items = [];
}
isEmpty() {
return this.items.length == 0;
}
add(element, priority) {
var qElement = new QElement(element, priority);
var contain = false;
for (var i = 0; i < this.items.length; i++) {
if (this.items[i].priority > qElement.priority) {
this.items.splice(i, 0, qElement);
contain = true;
break;
}
}
if (!contain) {
this.items.push(qElement);
}
}
peek() {
if (this.isEmpty())
return "No elements in Queue";
return this.items[0];
}
poll() {
if (this.isEmpty())
return "Underflow";
return this.items.shift();
}
/*changePriority(firstTerm, secondTerm)
{
let xxx = new QElement(firstTerm, secondTerm);
for (let i = 0; i < this.items.length; i++){
if (this.items[i].element === firstTerm){
this.items[i].priority = secondTerm;
this.items.splice(i, 0, xxx);
}
}
this.items.push(xxx);
}*/
hasValue(args) {
let status = false;
for (let i = 0; i < this.items.length; i++) {
if (this.items[i].element === args) {
status = true;
}
}
console.log(status);
}
size() {
if (this.isEmpty())
return "Underflow";
return this.items.length;
}
printPQueue() {
var str = "";
for (var i = 0; i < this.items.length; i++)
str += this.items[i].element + " ";
return str;
}
}
var priorityQueue = new PriorityQueue();
console.log(priorityQueue.isEmpty());
console.log(priorityQueue.peek());
priorityQueue.add("Sumit", 2);
priorityQueue.add("Gourav", 1);
priorityQueue.add("Piyush", 1);
priorityQueue.add("Sunny", 2);
priorityQueue.add("Sheru", 3);
console.log(priorityQueue.printPQueue());
console.log(priorityQueue.peek().element);
console.log(priorityQueue.poll().element);
priorityQueue.add("Sunil", 2);
console.log(priorityQueue.size());
priorityQueue.hasValue('Sumit');
console.log(priorityQueue.printPQueue());
priorityQueue.changePriority("Sheru", 1);
console.log(priorityQueue.printPQueue());
解决方案
- 您缺少 return 关键字。这很有效:
hasValue(args) {
for (let i = 0; i < this.items.length; i++) {
if (this.items[i].element === args) {
return true;
}
}
return false;
}
- 我不明白你的 changePriority 函数应该如何工作。只需找到元素并根据优先级更改上下移动它:
swap(a, b) {
let tmp = this.items[a];
this.items[a] = this.items[b];
this.items[b] = tmp;
}
changePriority(firstTerm, secondTerm) {
let i = 0;
while (i < this.items.length) {
if (this.items[i].element === firstTerm) {
if (secondTerm < this.items[i].priority) {
// move up
this.items[i].priority = secondTerm;
while (i > 0 && this.items[i - 1].priority > secondTerm) {
this.swap(i - 1, i);
i--;
}
} else if (secondTerm > this.items[i].priority) {
// move down
this.items[i].priority = secondTerm;
while (i < this.items.length - 1 && this.items[i + 1].priority < secondTerm) {
this.swap(i + 1, i);
i++;
}
}
break;
}
i++;
}
}
推荐阅读
- node.js - 错误:Route.get() 需要回调函数,但尽管 module.exports = router; 但得到了 [object Undefined] 在那里?
- python - 尝试使用 os 使用 Python 打开视频,但控制台显示找不到目录
- jenkins - 从 BlueOcean 创建管道时如何从 Jenkinsfile 中选择作业名称
- android - Kotlin 插件更新后 Gradle 项目同步失败
- json - 使用递归时无法用字符串索引字符串
- python - 将“操作系统模块”导入 Spyder interpereter (Anaconda) 不起作用
- sql - 使用 SQL 和 sqlalchemy.types 进行数据类型转换
- python - 分箱散点图 Python
- powershell - 如何将参数从 AWS Step Functions 传递到 PowerShell AWS Lambda?
- sql - 通过 VBA 将 CSV 文件导入 SQLITE 数据库 - Access