Опубликован: 27.09.2006 | Уровень: для всех | Доступ: свободно
Лекция 10:

Основы объектно-ориентированного программирования

L2-список

Рис. 10.4. L2-список

L2-список — линейный двусвязный список — можно представлять себе в виде перекидного календаря или бус, нанизанных на нить. Для списка определены его начало и конец, а также указатель. Указатель всегда находится между элементами списка (в случае перекидного календаря указателю соответствует то место, на котором календарь раскрыт). Графическая иллюстрация L2-списка представлена на рис. 10.4.

Как это видно из приведенного ниже интерфейса, добавление или удаление элементов из списка возможно только рядом с указателем (для того, чтобы вынуть лист из календаря, надо раскрыть его на нужном месте).

Пример интерфейса

interface L2List {
    // Пуст ли список?
    boolean empty();
    // Сделать список пустым.
    void    clear();
    // Передвинуть указатель в начало списка.
    void    toFront();
    // Передвинуть указатель в конец списка.
    void    toBack();
    // Указатель в начале списка?
    boolean begin();
    // Указатель в конце списка?
    boolean end();
    // Передвинуть указатель вперед.
    void    forward() throws Exception;
    // Передвинуть указатель назад.
    void    backward() throws Exception;
    // Получить число за указателем;
    int     after() throws Exception;
    // Получить число перед указателем;
    int     before() throws Exception;
    // Добавить число за указателем;
    void    insertBack(int val);
    // Добавить число перед указателем;
    void    insertFront(int val);
    // Удалить число за указателем.
    int     eraseBack() throws Exception;
    // Удалить число перед указателем.
    int     eraseFront() throws Exception;
}

Попытки передвинуть указатель за начало или конец списка или извлечь элемент из пустого списка приводят к возникновению исключительной ситуации.

L1-список — линейный односвязный список отличается от L2-списка тем, что двигаться по нему можно только в одном направлении (календарь не разрешается листать назад), а вставлять и удалять элементы — только за указателем.

Пример интерфейса

interface L1List {
    // Пуст ли список?
    boolean empty();
    // Сделать список пустым.
    void    clear();
    // Передвинуть указатель в начало списка.
    void    toFront();
    // Указатель в конце списка?
    boolean end();
    // Передвинуть указатель вперед.
    void    forward() throws Exception;
    // Получить число за указателем;
    int     after() throws Exception;
    // Добавить число за указателем;
    void    insert(int val);
    // Удалить число за указателем.
    int     erase() throws Exception;
}

Исключительные ситуации при работе с односвязным списком возникают по тем же причинам, что и для двусвязного списка.

Простое и понятное описание интерфейсов всех рассмотренных выше типов содержится в первой главе учебного пособия [9]. Для получения более полной информации по рассмотренным вопросам можно обратиться к описанию стандартных контейнеров библиотеки языка C++ (книга [12]) и описанию пакета java.util (книги [11] и [13]).

Анастасия Халудорова
Анастасия Халудорова
подавляющее большиство фукций на пространстве последовательостей?
екатерина яковлева
екатерина яковлева
как получить сертификат,что для этого нужно?
Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Антон Никитин
Антон Никитин
Россия, Хабаровск