Listy i drzewa - main5.amu.edu.pl

Transkrypt

Listy i drzewa - main5.amu.edu.pl
Algorytmy i programowanie
Listy i drzewa
Lista jednokierunkowa
Lista jednokierunkowa to ciąg elementów, w którym każdy zawiera atrybuty: key i next, gdzie dla
dowolnego elementu x listy next [x] wskazuje następny element po x. Wartość elementu x odczytujemy
przez key [x] , a następnego elementu po x - key [next [x]] .
Listę reprezentujemy przez obiekt L, który zawiera atrybuty: head i tail, wskazujące odpowiednio
na pierwszy i ostatni element listy L. Ostatni element listy wskazuje na element pusty NIL.
Lista dwukierunkowa
W odróżnieniu od listy jednokierunkowej, każdy element listy dwukierunkowej zawiera dodatkowy
atrybut prev, wskazujący na element go poprzedzający. Na przykład element listy prev [next [x]] , to
tak na prawdę element x.
Drzewo binarne
Drzewo binarne składa się z elementów, z których każdy posiada atrybuty: key, left, right, gdzie
left i right wskazyją na lewego i prawego syna odpowiednio. Drzewo reprezentowane jest przez obiekt
z atrybutem root.
Drzewo BST (Binary Search Tree)
Jest to drzewo binarne z dodatkową własnością, że dla każdego jego węzła x spełnione są nierówności:
key [left [x]] ¬ key [x] oraz key [x] ¬ key [right [x]]
1. Napisać w pseudokodzie procedurę ListInsertAfter(L, wsk, x) wstawiającą element x po elemencie wsk w liście L, która jest:
a) jednokierunkowa,
b) dwukierunkowa.
2. Napisać w pseudokodzie procedurę ListInsert(L, x), która będzie umieszczała element x o zadanym kluczu klucz [x] na właściwym miejscu w posortowanej według kluczy liście dwukierunkowej
L.
3. Napisać w pseudokodzie procedurę (może być rekurencyjna), odwracającą kolejność elementów w
liście jednokierunkowej L.
4. Zasymulować działanie metod: preorder i inorder, na poniższym drzewie:
5. Napisać w pseudokodzie procedurę TreeAdd(T, x) dodającą węzeł x do drzewa BST T.
a) Jak będzie wyglądało drzewo BST dla listy: 65, 78, 18, 99, 3, 45, 79, 80, 61, 128.
b) Dlaczego czas działania algorytmu tworzenia drzewa BST z listy n elementowej jest ograniczony
z dołu przez Ω (n log n)? Kiedy ten algorytm ma złożoność Ω n2 ?

Podobne dokumenty