← Назад ко всем вопросам

Как называется наличие у объекта ссылки на предыдущий и следующий объект

1️⃣ Как кратко ответить

Наличие у объекта ссылки на предыдущий и следующий объект называется "двусвязный список" (doubly linked list).

2️⃣ Подробное объяснение темы

Двусвязный список — это структура данных, в которой каждый элемент (узел) содержит ссылки на два других элемента: предыдущий и следующий. Это позволяет легко перемещаться по списку в обоих направлениях, что делает двусвязные списки более гибкими по сравнению с односвязными списками, где каждый элемент ссылается только на следующий.

Зачем это нужно

Двусвязные списки полезны, когда требуется частое перемещение в обоих направлениях по списку или когда необходимо легко удалять элементы из середины списка. Они часто используются в реализации структур данных, таких как деки (двусторонние очереди) и списки истории в браузерах.

Как это работает

Каждый узел в двусвязном списке содержит три компонента:

  1. Данные — информация, которую хранит узел.
  2. Ссылка на предыдущий узел — указатель на предыдущий элемент в списке.
  3. Ссылка на следующий узел — указатель на следующий элемент в списке.

Пример кода

// Класс для представления узла двусвязного списка
class Node {
    int data; // Данные, хранимые в узле
    Node prev; // Ссылка на предыдущий узел
    Node next; // Ссылка на следующий узел
​
    // Конструктор для создания нового узла
    Node(int data) {
        this.data = data; // Инициализация данных
        this.prev = null; // Изначально предыдущий узел отсутствует
        this.next = null; // Изначально следующий узел отсутствует
    }
}
​
// Класс для представления двусвязного списка
class DoublyLinkedList {
    Node head; // Ссылка на первый узел списка
​
    // Метод для добавления нового узла в конец списка
    void append(int data) {
        Node newNode = new Node(data); // Создание нового узла
        if (head == null) { // Если список пуст
            head = newNode; // Новый узел становится первым элементом
            return;
        }
        Node last = head; // Начинаем с первого узла
        while (last.next != null) { // Ищем последний узел
            last = last.next; // Переход к следующему узлу
        }
        last.next = newNode; // Устанавливаем новый узел как следующий для последнего
        newNode.prev = last; // Устанавливаем предыдущий узел для нового
    }
​
    // Метод для печати списка в прямом порядке
    void printList() {
        Node current = head; // Начинаем с первого узла
        while (current != null) { // Пока не достигнем конца списка
            System.out.print(current.data + " "); // Печатаем данные текущего узла
            current = current.next; // Переход к следующему узлу
        }
    }
}
​
// Пример использования двусвязного списка
public class Main {
    public static void main(String[] args) {
        DoublyLinkedList dll = new DoublyLinkedList(); // Создание нового двусвязного списка
        dll.append(10); // Добавление элемента со значением 10
        dll.append(20); // Добавление элемента со значением 20
        dll.append(30); // Добавление элемента со значением 30
        dll.printList(); // Печать списка: 10 20 30
    }
}

В этом примере мы создали класс Node для представления узла двусвязного списка и класс DoublyLinkedList для управления списком. Метод append добавляет новый узел в конец списка, а метод printList выводит все элементы списка в прямом порядке.

Тема: ООП
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки