Опубликован: 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]).

Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Ирина Тютрина
Ирина Тютрина
Россия, Усолье-Сибирское
Глеб Бочкарёв
Глеб Бочкарёв
Россия