
- •Визначувані типи
- •Опис визначуваного типу
- •Класифікація відомих визначуваних типів
- •Використання визначуваного типу
- •Підтипи
- •Перелічувані типи. 1
- •Перелічувані типи. 2
- •Об'єднаний тип
- •Складений тип
- •Рядковий тип
- •Представлення рядків
- •Представлення рядкового літерала в мові Pascal
- •Операції над рядковими знченнямив мові Pascal
- •Представлення рядкового літерала в мові с
- •Індексовані типи
- •Устрій одновимірних мультизначень
- •Устрій двовимірних мультизначень
- •Опис устрою мультизначення індексованого типу
- •Устрій паспорту індексованого типу
- •Приклади опису устрою індексованого типу. 1
- •Приклади опису устрою індексованого типу. 2
- •Індексатор
- •Основні властивості індексованих типів
- •Опис об'єктів індексованого типу. 1
- •Опис об'єктів індексованого типу. 2
- •Ініціалізація об'єктів індексованого типу
- •Ініціалізація при створенні об'єкту
- •Ініціалізація об'єкту оператором привласнення
- •Особливості індексованого типу в мові с.1
- •Особливості індексованого типу в мові с.2
- •Іменовані (комбіновані) типи
- •Механізм обробки значень іменованого типу
- •Відмінності в застосуванні іменованого та індексованого типів
- •Використання типізованих вказівних змінних іменованого типу
- •Спеціальний випадок використання типізованих вказівних змінних іменованого типу
- •Структури даних. Визначення
- •Структури даних. Визначення
- •Лінійні структури даних
- •Лінійний список
- •Лінійний список
- •Підходи до реалізації списку
- •Моделювання лінійного списку. 1
- •Векторне представлення лінійного списку. 1
- •Векторне представлення лінійного списку. 2
- •Векторне представлення стеку
- •Векторне представлення черги
- •Моделювання лінійного списку. 2
- •Зв’язане представлення черги. 2
- •Нелінійні структури даних
- •Представлення дерев
- •Устрій дерева як структури даних
- •Види дерев як структур даних
- •Моделювання дерева. Приклад 2
Зв’язане представлення черги. 2
Видалення елементу (перевірка на наявність даних у черзі обовязкова)
{запам’ятовування голови черги}
del_el := queue_head;
{отримання даного з голови черги}
data := queue_head.data;
{перевизначення голови на другий вузол}
queue_head := queue_head^.next;
{видалення запамятованого вузла-голови з «купи»}
dispose (del_el);
Нелінійні структури даних
Представником нелінійних структур даних є дерево.
Дерево – це скінченна множина Т, що складається з одного або більшої кількості компонентів (вузлів), таких, що:
існує один вузол, який називається коренем;
решта вузлів міститься в m ³ 0 попарно неперетинних множинах t1……tm Î T, кожна з яких, у свою чергу, є деревом і називається піддеревом даного кореня.
Дерева є рекурсивною структурою даних. Рекурсивним називається об’єкт або процес, визначений на самому собі.
Представлення дерев
Графічне
Список
La = ((b) (c(d) (e(f) (g))));
За допомогою множин
Устрій дерева як структури даних
Порядок розміщення вершин у дереві важливий:
Вершина, що міститься нижче від іншої вершини, називається безпосереднім потомком цієї вершини, а верхня вершина – батьком.
Корінь дерева міститься на ровні “0”, його нащадки на рівні “1” і так далі. Довжина шляху від вузла до вузла – це кількість гілок, які необхідно пройти від одного вузла, щоб досягти іншого вузла.
Види дерев як структур даних
Вироджене дерево – це таке дерево, в якого кожний вузол містить піддерево з вузлом, не більш як одним. Наприклад, лінійний список – це вироджене дерево.
Дерево називається двійковим (бінарним деревом – binarny tree), якщо в кожного вузла дерева тільки два нащадки.
Дерево називається сильно розгалуженим, якщо в кожного вузла більш як два нащадки.
Операції над деревами
Основна операція, виконувана на деревах – це обхід (ітерування – iteration) дерева.
Для дерева, що представлено на рисунку, існуючі обходи цього дерева дають наступні результати:
згори-вниз – прямий порядок обходу (a, b, c);
зліва-направо – зворотний порядок обходу (b, a, c);
знизу-вгору – кінцевий порядок обходу (b, c, a).
Моделювання дерева. 1
Дерева подаються зв’язаними нелінійними списками.
Моделювання бінарного дерева здійснюється за допомогою типізованих вказівних змінних іменованого типу.
Pascal:
type
PTree = ^Tree;
Tree = record
data : integer;
pred,
next_left,
next_right : PTree;
end;
Кожний вузол дерева пов’язаний в 1 вузлом-батьком, а 2 вузлами-нащадками.
Моделювання дерева. 2
С:
struct Tree
{
int data;
Tree *next_left;
Tree *next_right;
}
Кожний вузол дерева пов’язаний лише з 2 вузлами-нащадками.
Моделювання дерева. Приклад 1
PTree = ^ Tree;
Tree = record
data : integer;
pred, next_left, next_right : PTree;
end;
var
tree_struct : PTree;
new_el : PTree;
cur_el : PTree;
data : integer;
i: integer;
const mas: array [1..5] of integer = (5,4, 8, 6, 3);
begin
tree_struct := nil;
for i:= 1 to 5 do
begin
data := mas[i];
new (new_el);
new_el^.data := data;
new_el^.pred := nil;
new_el^.next_left := nil;
new_el^.next_right := nil;
if tree_struct = nil then
tree_struct := new_el
else
begin
cur_el := tree_struct;
repeat
if cur_el^.data <= data then
if cur_el^.next_right = nil then
begin
cur_el^.next_right := new_el;
new_el^.pred := cur_el;
cur_el := nil;
end
else
cur_el := cur_el^.next_right
else
if cur_el^.next_left = nil then
begin
cur_el^.next_left := new_el;
new_el^.pred := cur_el;
cur_el := nil;
end
else
cur_el := cur_el^.next_left;
until cur_el = nil;
end;
end;
end.
Рис. Дерево, що будується в програмі