Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию [pdf]

.pdf
Скачиваний:
740
Добавлен:
02.05.2014
Размер:
6.04 Mб
Скачать

1049. Еще один из наиболее важных видов структур, встречающихся в программировании, представляют собой деревья. Формально дерево (рис. 124) определяется как конечное множество Т, состоящее из одного или более узлов таких, что

1) имеется один узел, называемый корнем дерева; 2) остальные узлы (исключая корень) содержатся в т > 0

попарно непересекающихся множествах T1 , ..., Tm , каждое из которых в свою очередь является деревом; деревья T1 , ..., Tm называются поддеревьями данного корня [34].

Деревья, как правило, дают хорошее представление о структурных отношениях между элементами данных. Так, например, на рис. 125 показано дерево, представляющее формулу (AB + CD)/BC.

Здесь ветвь, отходящая от вершины влево, представляет числитель дроби, а ветвь, отходящая вправо, - ее знаменатель и т.д.

Рис. 124 Рис. 125 Ещё один пример-фрагмент дерева (рис. 126), показывающего

возможные ходы при игре в восемь (эта игра аналогична игре в пятнадцать); исходная и целевая позиции приведены соответственно на рис. 127, а и 127, б [41].

 

 

 

 

 

2

8

3

 

 

 

 

 

 

 

 

 

1

6

4

 

 

 

 

 

 

 

 

 

7

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

8

3

 

2

8

3

 

2

8

3

 

1

6

4

 

1

 

 

4

 

1

6

4

 

 

7

5

 

7

6

5

 

7

5

 

. . .

 

 

 

 

 

 

 

 

 

 

 

. . .

 

2

8

3

 

2

 

 

3

 

2

8

3

 

 

1

4

 

1

8

4

 

1

4

 

 

7

6

5

 

7

6

5

 

7

6

5

. . .

 

 

 

 

 

 

 

 

. . .

 

 

 

 

 

2

3

 

2

3

 

 

 

 

 

 

1

8

4

 

1

8

4

 

 

 

 

 

7

6

5

. . .

7

6

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 126 Далее будем рассматривать только бинарные деревья. Бинарное

дерево определяется как конечное множество узлов, которое либо пусто, либо состоит из корня и двух бинарных деревьев (рис. 128).

 

 

 

 

 

 

A

 

2

8

3

1

2 3

 

B

C

1

6

4

8

4

D

E

F

7

 

5

7

6 5

аб

Рис. 127

G

H

J

 

 

Рис. 128

 

При работе с древовидными структурами наиболее часто приходится решать задачу обхода дерева - такого последовательного прохождения по узлам дерева, когда каждый узел встречается ровно один раз. Для обхода бинарного дерева можно воспользоваться одним из трех способов: можно проходить узлы в префиксном порядке, в инфиксном порядке и в суффиксном порядке.

Префиксный порядок обхода дерева определяется в виде списка проходимых узлов следующим образом. Если дерево не пусто, префиксный порядок - это

корень дерева; узлы левого поддерева в префиксном порядке;

узлы правого поддерева в префиксном порядке.

Инфиксный порядок обхода дерева определяется следующим образом. Если дерево пусто, список узлов пуст. Если дерево не пусто, инфиксный порядок - это

узлы левого поддерева в инфиксном порядке; корень дерева; узлы правого поддерева в инфиксном порядке.

Суффиксный порядок обхода дерева определяется следующим образом. Если дерево пусто, список узлов пуст. Если дерево не пусто, суффиксный порядок - это

узлы левого поддерева в суффиксном порядке; узлы правого поддерева в суффиксном порядке; корень дерева.

Составить процедуры обхода заданного бинарного дерева в префиксном, инфиксном и суффиксном порядке.

1050. Составить процедуру подсчета числа узлов заданного бинарного дерева.

1051. Листом дерева называется вершина, не являющаяся корнем никакого поддерева. Составить процедуру подсчета числа листьев заданного бинарного дерева.

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

Будем считать, что вся имеющаяся свободная память представлена в виде списка свободных блоков. В начальный момент в списке только один блок, содержащий всю свободную память. Каждый блок содержит заголовок с размерами блока и указателем на следующий блок. Выделение свободной памяти по запросу часто выполняется либо по методу «наиболее подходящего», либо по методу «первого подходящего».

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

Если блок, выбранный по одному из двух указанных методов имеет размер, превышающий указанный при запросе, он расщепляется

на два: первый блок имеет требуемый размер и предоставляется в ответ на запрос, второй блок - остаток - остается в списке свободной памяти. При освобождении блока смежные блоки склеиваются.

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

СПИСОК ЛИТЕРАТУРЫ

1.Абрамов С. А. Математические построения и программирование. -

М.: Наука, 1978.

2.Абрамов С. А. Элементы программирования. - М.: Наука, 1982.

3.Абрамов С. А., Антипов И. Н. Основы программирования на алголе. - М.: Наука, 1980.

4.Абрамов С. А., Зима Е. В. Начала программирования на языке Паскаль. -М.: Наука, 1987.

5.Агафонов В. Н., Поттосин И. В., Бежанова Л. М. , Сабельфельд В. К. Сборник упражнений по программированию на языке ПАСКАЛЬ. - Новосибирск: Изд-во Новосиб. ун-та, 1985.

6.Антипов И. Н. , Бальцюк Н. Б. , Щенников В. В. Сборник задач и упражнений по программированию на АЛГОЛе - 60.- М.: Изд. МГПИ им. В. И. Ленина, 1974.

7.Балуев А. Н., Даугавет В. А., Шидловская Н. А. Сборник упражнений по АЛГОЛ-60. - М.: Наука, 1976.

8.Бауэр Ф. Л., Гнац Р., Хилл У. Информатика. Задачи и решения. - М.:

Мир, 1978.

9.Баяковский Ю. М., Вьюкова Н. И. , Галатенко В. А., Ходулев А. Б. Конспект курса программирования для учащихся 9-10 классов математической школы. - М.: Изд-во ИПМ АН СССР им. М. В. Келдыша, 1985.

10.Бронштейн И. Н., Семендяев К.А.Справочник по математике.- М.:

Наука, 1986.

11.Брудно А. .Л., Каплан Л. И. Олимпиады по программированию для школьников. -М.: Наука, 1985.

12.Бутумо И. Д. , Самочадин А. В., Усанова Д. В. Программирование на алгоритмическом языке ПАСКАЛЬ для микро ЭВМ. - Л. : Изд-во Ленинградск. ун-та, 1985.