当前位置: 首页 > 知识库问答 >
问题:

带链表的Java优先级队列

谢旻
2023-03-14

几天来,我一直在试图弄清楚一个关于最近任务的问题,但我似乎无法理解它。问题如下:

创建一个PriorityQueue类,该类包含两个字段:NoopPriorities和LinkedList…它应该有一个构造函数,该构造函数接受一个int值。将该值分配给NoopPrioities…同时,添加与NumberOfPrioritiorities一样多的LinkedList。获取优先级和对象的Enqueue方法。返回下一个优先级元素的Dequeue方法…并将其从列表中删除…

我问题的很大一部分是我无法确切地确定教授在寻找什么,因为措辞对我来说似乎有点奇怪......简单地询问它也没有产生任何帮助。

只是为了澄清,我不是在寻找任何人给我答案。我只是在寻找朝着正确方向前进的动力。如果有人能帮忙,将不胜感激。

共有3个答案

勾向文
2023-03-14

我认为您需要一个链表数组,而不仅仅是一个。问题描述是矛盾的,说您既需要一个有一个链表的类,又需要在构造对象时创建多个链表。

这是您的类的构造函数:

MyPriorityQueue(int npriorities)
{
    noOfPriorities = npriorities;
    queueArray = new ArrayList<List<T>>();
    for (int i = 0; i < npriorities; ++i) queueArray.add(new LinkedList<T>());
}

然后,您将获得优先级到队列的映射。您的 enque 方法将采用一个对象和一个优先级(表示优先级的 int),并将该对象添加到优先级指定的队列中。您的取消排队方法将只返回最高优先级队列的末尾,其中包含一个元素

有意义吗?

欧阳山
2023-03-14

同意了,任务措辞很糟糕。

在同一时间添加尽可能多的LinkedList作为numberOf优先...

这可能应该是“同时将尽可能多的节点添加到LinkedList中,作为numberOf优先事项...”

下一个要问自己的问题是,我应该在所有这些链接的节点中存储什么类型的东西...?

司徒俊良
2023-03-14

为诚实地说这是家庭作业而干杯。

我认为,如果您仔细阅读什么是优先级队列,则可以更好地理解这个问题。

让我们举一个小例子。您有几个任务要做,每个任务都有优先级。

  • Pri 1-呼吸、进食和睡眠
  • Pri 2-学习、游戏
  • Pri 3-看电影

以上所有信息都可以由您的PriorityQueue处理。您有3种优先级,因此您有3个列表。每个列表都是为了维护具有相同优先级的任务。

一旦通过调用PriorityQueue(3)构造了空的Priority队列,就可以向其中添加任务。

假设您要添加优先级为 2 的任务“研究”。你可以说,优先级排队(2,“学习”)。然后,您将转到维护优先级为 2 的项目的列表,并将任务“研究”添加到该列表中。

类似地,当您想知道下一个优先级为3的项目是什么时,可以说priorityQueue.dequeue(3)。然后,您将找到处理优先级3项的列表,并从该列表中删除最后一个html" target="_blank">元素。

这将使您更好地了解如何开始工作。:)

 类似资料:
  • 注意:我知道可以用比较器创建优先级队列,然后重复调用Add。

  • 在我实现Dijkstra算法的过程中,我有1个数组(包含所有节点)和1个优先级队列(包含所有节点)。每当一个节点排队时,我都会用新的距离和它来自哪里来更新所有相邻的节点,这样我就可以回溯路径。 优先级队列中的节点更新为新距离,数组中的节点更新为它来自的位置和新距离。当节点出列时,数组中的最终距离会更新: 用前一个节点的信息更新数组和用距离更新优先级队列是否可以接受? 只要找到更好的距离,就会发生这

  • 我有一个,名为,其中包含类型的对象。 您可以在所有车辆上调用该方法。 我要做的是排序,这样车辆被赋予更高的优先级,并被放在队列的前面。 我假设我必须在这里使用一个比较器,但不知道怎么做。

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我所拥有的是一个类,它创建了一个具有优先级、到达时间和完成时间的对象。我还有许多优先级队列可以将它们放入其中。当我开始时,我将它们放入到达队列中,对它们进行排序,然后查看哪个第一个进入,并将其放入队列中。但是,当我尝试向到达队列添加第二个队列时,它会失败并抛出一个异常。我首先要做的是将所有进程添加到到达队列中,然后对它们进行排序,这样到达时间最短的进程将是到达队列中第一个进入队列的进程。谢谢你帮忙

  • 假设我实现了一个HashMap,其中字符被分配了一个值的ArrayList。 我已经在HashMap中创建了这些字符的PriorityQueue,但我希望能够根据此优先级删除这些字符: {a,b,c} {a,b}删除c,因为它的ArrayList中包含一个值,该值决定必须首先删除它。 对此最好的方法是什么?