Александр Дзен
Мыслитель
(5114)
1 год назад
Конечно, я могу помочь вам с реализацией очереди с приоритетом на Java без использования готовых шаблонов или библиотек. Вот пример простой реализации:
```java
import java.util.ArrayList;
import java.util.List;
public class PriorityQueue {
private List<Integer> elements;
public PriorityQueue() {
elements = new ArrayList<>();
}
public void add(int element) {
elements.add(element);
int currentIndex = elements.size() - 1;
while (currentIndex > 0) {
int parentIndex = (currentIndex - 1) / 2;
if (elements.get(currentIndex) <= elements.get(parentIndex)) {
break;
}
swap(currentIndex, parentIndex);
currentIndex = parentIndex;
}
}
public int remove() {
if (elements.isEmpty()) {
throw new IllegalStateException("Priority queue is empty.");
}
int root = elements.get(0);
int lastIndex = elements.size() - 1;
elements.set(0, elements.get(lastIndex));
elements.remove(lastIndex);
lastIndex--;
int currentIndex = 0;
while (true) {
int leftChildIndex = 2 * currentIndex + 1;
int rightChildIndex = 2 * currentIndex + 2;
int maxIndex = currentIndex;
if (leftChildIndex <= lastIndex && elements.get(leftChildIndex) > elements.get(maxIndex)) {
maxIndex = leftChildIndex;
}
if (rightChildIndex <= lastIndex && elements.get(rightChildIndex) > elements.get(maxIndex)) {
maxIndex = rightChildIndex;
}
if (maxIndex == currentIndex) {
break;
}
swap(currentIndex, maxIndex);
currentIndex = maxIndex;
}
return root;
}
private void swap(int i, int j) {
int temp = elements.get(i);
elements.set(i, elements.get(j));
elements.set(j, temp);
}
}
```
В этой реализации используется список `ArrayList` для хранения элементов очереди. Метод `add` добавляет элемент в очередь и перестраивает её так, чтобы элементы располагались в порядке убывания приоритета. Метод `remove` удаляет и возвращает элемент с наивысшим приоритетом из очереди. Оба метода работают с временной сложностью O(log n), где n - количество элементов в очереди.
Вы можете использовать эту реализацию следующим образом:
```java
public class Main {
public static void main(String[] args) {
PriorityQueue priorityQueue = new PriorityQueue();
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(4);
priorityQueue.add(2);
System.out.println(priorityQueue.remove()); // Вывод: 4
System.out.println(priorityQueue.remove()); // Вывод: 3
System.out.println(priorityQueue.remove()); // Вывод: 2
System.out.println(priorityQueue.remove()); // Вывод: 1
}
}
```
Надеюсь, это поможет вам реализовать очередь с приоритетом на Java! Если у вас возникнут еще вопросы, не стесняйтесь
Условия:
- Нельзя использовать шаблоны(готовый Priority queue, методы для работы с ним)