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

Зв’язане представлення черги. 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.

Рис. Дерево, що будується в програмі

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