Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_informatika_i_programmirovanie.doc
Скачиваний:
6
Добавлен:
17.09.2019
Размер:
591.87 Кб
Скачать

20.Рекурсия при работе со списками и деревьями. Очередь, стек, дек как формы работы со списком, действия над ними

Рекурсия.

Метод P (процедура или функция) называется рекурсивным, если при выполнении тела метода происходит вызов метода P.

Дерево. Рекурсивное определение.

Дерево представляет собой вершину, имеющую ограниченное число связей (ветвей) к другим деревьям. Нижележащие деревья для текущей вершины называются поддеревьями, а их головные вершины - потомками. По отношению к потомкам текущая вершина называется предком. Вершины, не имеющие потомков, называются оконечными или терминальными, головная вершина всего дерева называется корневой. Рекурсивное определение дерева ведет к тому, что алгоритмы работы с ним тоже являются рекурсивными.

Полный рекурсивный обход дерева (не зависит от формы представления дерева). Любое действие, выполняемое над вершиной, должно быть выполнено также и по отношению ко всем его поддеревьям, а значит, алгоритм должен быть рекурсивно выполнен по отношению ко всем потомкам этой вершины. В качестве параметра обязателен идентификатор текущей вершины (индекс, указатель, ссылка).

Дерево называется сбалансированным, если длина максимальной и минимальной ветвей отличается не более чем на 1. Дерево представляет собой компромисс между массивом и списком.

Списки. Общее определение.

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

Список - структура данных, в которой каждый элемент имеет информационное поле (поля) и ссылку (ссылки), то есть адрес (адреса), на другой элемент (элементы) списка.

Списки. Рекурсивное определение.

Список - структура данных: 1) пустой список ([ ]) является списком; 2) структура вида [H|T] является списком, если H — первый элемент списка (или несколько первых элементов списка, перечисленных через запятую), а T — список, состоящий из оставшихся элементов исходного списка.

Рекурсивная обработка списков

Данное определение позволяет организовывать рекурсивную обработку списков, разделяя непустой список на голову и хвост. Хвост, в свою очередь, также является списком, содержащим меньшее количество элементов, чем исходный список. Если хвост не пуст, его также можно разбить на голову и хвост. И так до тех пор, пока мы не доберемся до пустого списка, у которого нет головы.

Рекурсия является одним из удобнейших средств при работе с линейными списками. Она позволяет сократить код программы и сделать алгоритмы обхода узлов деревьев и списков более понятными.

Стеки, деки, очереди.

Стек (англ. stack — стопка) — структура данных (упорядоченный набор элементов), в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

О перации над стеком:

1) добавление в стек нового элемента;

2) определение пуст ли стек;

3) доступ к последнему включенному элементу, вершине стека;

4) исключение из стека последнего включенного элемента.

Добавление элемента (проталкиванием - push), возможно только в вершину стека (добавленный элемент становится первым сверху). Удаление элемента (выталкивание - pop), тоже возможно только из вершины стека, при этом второй сверху элемент становится верхним.

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

Очередь — структура данных с дисциплиной доступа к элементам «первый пришёл — первый вышел» (FIFO, First In — First Out).

Операции над очередью:

1) добавление в конец очереди нового элемента;

2) определение пуста ли очередь;

3) доступ к первому элементу очереди;

4) исключение из очереди первого элемента.

Добавление элемента (принято обозначать словом enqueue — поставить в очередь) возможно лишь в конец очереди, выборка — только из начала очереди (что принято называть словом dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется.

Для реализации очереди необходим список, для которого известны адрес первого и адрес последнего элементов.

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

Д ек (от англ. deq - double ended queue, т.е. очередь с двумя концами) – очередь с двойным доступом – двухконечный стек - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с обоих концов списка.

Операции над деком:

  1. включение элемента справа;

  2. включение элемента слева;

  3. исключение элемента справа;

  4. исключение элемента слева;

  5. определение размера (проверка наличия элементов);

  6. очистка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]