Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры и алгоритмы обработки данных.doc
Скачиваний:
348
Добавлен:
12.03.2015
Размер:
1.81 Mб
Скачать

2.7. Контрольные вопросы по теме

  1. Что такое стековый принцип сохранения элементов?

  2. Какие основные операции реализуются для стеков?

  3. Какие шаги выполняются при добавлении элемента в стек-массив?

  4. Какие шаги выполняются при удалении элемента из стека-массива?

  5. Какие особые ситуации возможны при реализации стека с помощью массива?

  6. Какую структуру должен иметь элемент стека при динамической реализации?

  7. Что такое физический и логический порядок следования элементов в стеке?

  8. Как между собой связываются соседние элементы стека?

  9. Какие типы данных необходимы для динамической реализации стека?

  10. Какие переменные необходимы для реализации операций с динамическим стеком?

  11. Как реализуется проход по динамическому стеку?

  12. Как выполняется добавление элемента в динамический стек?

  13. Как выполняется удаление элемента из динамического стека?

  14. Сравните динамическую и статическую реализации стека

  15. Что такое структура данных типа очередь?

  16. Какие основные операции необходимы для реализации структур типа очередь?

  17. Как реализуется очередь с помощью массива?

  18. Как работает кольцевая очередь, реализованная с помощью массива?

  19. Какие особые ситуации возможны при реализации очереди с помощью массива?

  20. Как выполняется добавление элемента в очередь-массив?

  21. Как выполняется удаление элемента из очереди-массива?

  22. На чем основана динамическая реализация очереди?

  23. Зачем в очередь вводится фиктивный заголовочный элемент?

  24. Что включает в себя создание пустой динамической очереди с заголовком?

  25. Какие типы данных необходимы для динамической реализации очереди?

  26. Какие переменные используются для реализации основных операций с динамической очередью?

  27. Как реализуется проход по динамической очереди?

  28. Как реализуется добавление элемента в динамическую очередь?

  29. Как реализуется удаление элемента из динамической очереди?

  30. Какие особенности имеет приоритетная очередь?

  31. Сравните статическую и динамическую реализации очереди.

Тема 3. Основы реализации списковых структур

3.1. Структуры данных типа “линейный список”

Линейный список – это набор связанных однотипных элементов, в котором каждый элемент каким-то образом определяет следующий за ним элемент. В отличие от стека и очереди, добавление нового элемента возможно в любом месте списка, также можно удалить любой элемент списка. Ясно, что списковые структуры являются более гибкими, но и немного более сложными в реализации. Фактически, стеки и очереди можно считать частными случаями списков, в которых добавление и удаление элементов может выполняться только на концах.

Стандартный набор операций со списком включает:

  • добавление нового элемента после заданного или перед заданным элементом с проверкой возможности добавления элемента

  • удаление заданного элемента

  • проход по списку от первого элемента к последнему с выполнением заданных действий

  • поиск в списке заданного элемента

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

3.2. Первый способ статической реализации списка.

Он основан на том, что логический номер элемента списка полностью соответствует номеру ячейки массива, где этот элемент хранится: первый элемент списка – в первой ячейке массива, второй – во второй, третий – в третьей и т.д.

Элемент 1

Элемент 2

Элемент 3

. . . . . . .

Элемент N

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

Как выполнить вставку нового элемента внутри списка, например – в ячейку с номером i < N ? Для освобождения ячейки i все элементы списка начиная с номера i и до N надо сдвинуть вправо на одну ячейку (конечно, если в массиве есть еще хотя бы одна свободная ячейка). Копирование надо начинать с последней ячейки, т.е. N – на место N+1, N-1 – на место N, и.т.д. i – на место i+1. В освободившуюся ячейку i записывается новый элемент.

Аналогично (с точностью до наоборот) выполняется удаление любого внутреннего элемента: освобождается ячейка i и все последующие элементы сдвигаются влево на одну ячейку, т.е. i+1 – на место i, i+2 – на место i+1, и т.д., элемент N – в ячейку N-1.

Возникает вопрос о трудоемкости выполнения подобных операций перемещения ячеек массива. Если каждый элемент списка, размещенный в одной ячейке массива представляет собой запись с большим числом объемистых полей, то затраты на подобное перемещение могут стать слишком большими. Здесь выходом может быть изменение структуры элемента списка: в массиве хранятся ТОЛЬКО УКАЗАТЕЛИ (АДРЕСА) информационных частей и перемещение производится только этих указателей, сами информационные части остаются на своих местах. Учитывая все возрастающие скорости работы современных процессоров и наличие в их архитектуре быстрых команд группового копирования байтов, можно считать данный метод реализации списков вполне работоспособным.