Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
08.07.2017
Размер:
3.04 Кб
Скачать
package Task3;

/**
* Очередь.
* Реализация очереди на основе двусвязного списка.
* @author Vladislav
*/
public class ArrayDeque<E> {
private int count;// Количество элементов
private List list;// Список

/**
* Конструктор
*/
public ArrayDeque() {
list = new List();
count = 0;
}

/**
* Получение первого элемента списка без удаления.
*
* @return значение элемента.
*/
public E getFirst() {
List uk = list;
goToStart(uk);
return uk.value;
}

/**
* Получение первого элемента списка c удалением.
*
* @return значение элемента.
*/
public E peek() {
if (list == null) { return null; }
goToStart(list);
List el = list;
list = list.next;
count--;
return el.value;
}

/**
* Поиск элемента по индексу
*
* @param index
* @return
*/
public E get(int index) {
List uk = list;
while (uk != null) {
if (uk.index == index) { return uk.value; }
uk = uk.next;
}
return null;
}
/**
* Вывод всех элементов списка
*/
public void printAll() {
List uk = list;
goToStart(uk);
System.out.println("Приоритет\t|Значение\t|Порядок занесения");
System.out.println("---------\t|--------\t|-----------------");

while (uk != null) {
System.out.println(uk.priority + "\t\t|" + uk.value + "\t|" + uk.index);
uk = uk.next;
}

}
/**
* Получить количесто элементов в списке.
* @return количество элементов
*/
public int getCount() {
return count;
}
/**
* Поставить указатель в начало списка.
* @param list
*/
private void goToStart(List list) {
while (list.back != null) {
list = list.back;
}
}

/**
* Добавить элемент по приоритету.
* @param priority
* @param value
*/
public void push(int priority, E value) {
List temp = new List();
temp.value = value;
temp.priority = priority;
temp.index = count;
count++;

if (list.value == null) {
list = temp;
}
else {
List uk = list;
goToStart(uk);
while (uk.priority >= priority && uk.next != null) {
uk = uk.next;
}
if (uk.back == null && temp.priority > uk.priority) {
uk.back = temp;
temp.next = uk;
list = temp;
}
else if (uk.next == null && temp.priority < uk.priority) {

temp.back = uk;
uk.next = temp;
}
else {
temp.next = uk;
temp.back = uk.back;
uk.back.next = temp;
uk = temp;

}
}
}

/**
* Список.
* @author Vladislav
*
*/
private class List {
private E value;
private List next, back;
private int priority, index;
}
}
Соседние файлы в папке Task3