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

13.5. Задачі

Елемент списку описується наступним чином:

Type

Point = ^ Item;

Item = Record

Key: Integer;

Data: Real;

Next: Point

End;

  1. Реалізувати процедуру злиття двох списків, елементи яких розташовані за зростанням значень полів Key. При рівних значеннях полів Key значення полів Data додаються. Оцінити складність алгоритму за часом у термінах довжин списків.

  2. Реалізувати процедуру зчеплення (конкатенації) двох списків. Оцінити складність алгоритму за часом у термінах довжин списків.

  3. Реалізувати процедуру сортування списку злиттям. Оцінити складність алгоритму за часом і пам’яттю (у гіршому випадку).

  4. Реалізувати процедуру побудови списку, значущі елементи якого зберігаються у файлі F

а) F: File of Record Key: Integer; Data: Real End; із збереженням порядку розташування елементів у файлі. Оцінити складність алгоритму за часом.

б) F: File of Record Key: Integer; Data: Real End; Список повинен бути впорядкований за значеннями полів Key. Оцінити складність алгоритму за часом.

5.Реалізувати процедури Push і Pop відповідно добавлення і вилучення елемента для стека.

6.Реалізувати процедури Push і Pop відповідно добавлення і вилучення елемента для черги.

13.6. Дерева

Динамічні структури даних зручно визначати за допомогою рекурсивних визначень. Список, наприклад, визначається наступним чином:

<список > ::= Nil | <елемент списку > < список >

Т ут символ "::=" означає "є за визначенням", "|" - "або", " " - покажчик (посилання).

Аналогічно можна визначити і структури, що розгалужуються – так звані дерева. Елемент такої структури (вузол дерева) визначається як запис, що містить декілька полів посилань. Наприклад:

Type

Point = ^ Item;

Item = Record

Data: Integer;

Right, Left: Point

End;

T ype

Link = ^ TreeVert;

TreeVert = Record

Data: Real;

Key : Integer;

Left, Middle, Right : Link

End;

Рис 13.15. Структура вершини тернарного дерева

Кількість посилальних полів вузла дерева називається степенем розгалуження (арністю) вузла. Рекурсивне визначення дерева тоді має вид:

<дерево> ::= Nil | < вузол дерева >

<дерево> <дерево> . . . <дерево>

Таким чином, дерево може бути або виродженим (Nil), або складено з вузла дерева, всі покажчики якого виставлені на дерева. У цьому випадку вузол називають коренем дерева, а дерева, на які виставлені покажчики – піддеревами. Якщо піддерево складається з одного вузла, всі покажчики якого встановлені на Nil, його називають листом. Інші вузли дерева називають проміжними. Сукупність посилальних полів може бути оформлена як запис або як декілька полів запису (як у наших прикладах). Часто сукупність посилальних полів визначається в виді масиву посилань, або організується у виді списку посилань. У цих випадках говорять про впорядковані дерева, так як піддерева одного кореня виявляються впорядкованими або індексами масиву, або за порядком доступу. Якщо всі вузли дерева мають один і той же степінь розгалуження, можна говорити про степінь розгалуження дерева. Дерева, степінь розгалуження яких дорівнює двом, називають бінарними. Бінарні дерева – одна з найбільш поширених структур, що розгалужуються, які застосовуються у програмуванні.