• Nie Znaleziono Wyników

Definicja Lista jest to struktura danych zawierająca pewne elementy ustawione w jakiejś kolejności.

N/A
N/A
Protected

Academic year: 2022

Share "Definicja Lista jest to struktura danych zawierająca pewne elementy ustawione w jakiejś kolejności."

Copied!
22
0
0

Pełen tekst

(1)

Listy

(2)

Definicja Lista jest to struktura danych zawierająca pewne elementy ustawione w jakiejś kolejności.

Zatem mając element x możemy mówić

o elemencie natsępnym i poprzednim na liście


Typowe operacje na liście to: wstaw, usuń, szukaj Implementacje listy:

- tablicowa

- dowiązaniowa

(3)

implementacja tablicowa list

elementy listy są pamiętane na kolejnych pozycjach w pamięci i są indeksowane

kolejnymi liczbami 0, 1, 2, …

element 3 5 7 8 2 ... 3

pozycja 0 1 2 3 4 …..

takie np. są listy w Pythonie

(4)

implementacja tablicowa list

Obserwacja czasowa złożoność pesymistyczna

operacji wstaw, szukaj, usuń jest Θ(n), gdzie n to ilość elementów na liście (czyli w tablicy)

Uzasadnienie: wstawienie na początek, czy

usunięcie elementu z początku listy pociąga za sobą przesuwanie elementów listy

Szukanie też może wymagać sprawdzenia

wszystkich elementów zanim np. stwierdzimy, że szukanego elementu nie ma na liście

(5)

listy dowiązaniowe

elementy listy to pewne struktury w zapisane w pamięci na niekoniecznie kolejnych miejscach, ale każdy element ma informację, jaki jest następny element i jaki

poprzedni, czyli ma dowiązanie (wskaźnik) do następnego i poprzedniego, reprezentowane na poniższych rysunkach strzałkami

None to specjalna wartość oznaczająca brak dowiązania

7 5 23

head

None ...

None

(6)

listy dowiązaniowe mogą być:

- dwukierunkowe

7 5 23

head

None ...

None

- jednokierunkowe

7 5 23

head

None ...

None

(7)

listy dowiązaniowe mogą być:

- cykliczne dwukierunkowe

7 5 23

head

...

- cykliczne jednokierunkowe

7 5 23

head

...

(8)

- i te same warianty z wartownikiem

7 23

none

...

none (przez małe n) oznacza tutaj dodatkowe miejsce na liście, w którym nie przechowujemy żadnej wartości ale służące tylko do tego, żeby lista nie była nigdy pusta

(9)

Notacja

None - pusty wskaźnik l.head - początek listy l

x.next - następny element po elemncie x
 x.prev - poprzedni element po elemencie x

x.key - wartość (klucz) identyfikujący węzeł x l.none - wartownik listy l (jeżeli lista ma

wartowników)

elementy listy dowiązaniowej często nazywamy węzłami listy; dokładniej, węzeł to zawartość

elementu listy plus dowiązania

(10)

węzeł listy w Pythonie

class Node:

def __init__(self,k):

self.key = k self.next = None self.prev = None

jest to definicja klasy

Utworzenie obiektu tej klasy, czyli węzła:

x = Node(7)

(11)

instrukcja

x = Node(7)

wywołuje konstruktor klasy Node, czyli funkcję __init__(self,k)

self oznacza tutaj konstruowny obiekt czyli x

(12)

lista w Pythonie

class LinkedList:

def __init__(self):

self.head = None def listInsert(self, x):

………

# i dalej definicje pozostałych # funkcji

jest to definicja kolejnej klasy

head jest pierwszym elementem listy

Utworzenie obiektu tej klasy: l = LinkedList()

(13)

szukanie (poprzez przeglądanie listy od początku)

7 5 23

head

None ...

None

zlożoność pesym. Θ(n), n - ilość elementów

(14)

szukanie (poprzez przeglądanie listy od początku)

def listSearch(self,k):

# szuka wezla zawierajacego klucz k # lista dwukierunkowa niecykliczna bez wartownika x = self.head while x!=None and x.key!=k:

x = x.next return x # None oznacza, ze szukanego klucza # nie ma na liscie

7 5 23

head

None ...

None

zlożoność pesym. Θ(n), n - ilość elementów x

(15)

wstawianie (na początek)

7 5 23

k head

zlożoność pesymistyczna O(1),

(16)

wstawianie (na początek)

7 5 23

k

head

zlożoność pesymistyczna O(1),

def listInsert(self, x):

# wstawia wezel x do listy L # lista dwukierunkowa niecykliczna bez wartownika x.next = self.head if self.head != None:

self.head.prev = x self.head = x x.prev = None

x

(17)

lista dowiązaniowa

usuwanie (już wyszukanego elementu x)

7 5 23

9

head x

(18)

usuwanie (już wyszukanego elementu x)

7 5 23

9

head x

(19)

usuwanie (już wyszukanego elementu x)

7 5 23

9

head

zlożoność pesym. O(1), x

(20)

usuwanie (już wyszukanego elementu x)

7 5 23

9

head x

def listDelete(self,x):

# usuwa wezel x z listy # lista dwukierunkowa niecykliczna bez wartownika if x.prev != None:

x.prev.next = x.next else:

self.head = x.next if x.next != None:

x.next.prev = x.prev

(21)

usuwanie - wersja z wartownikiem

9 5 23

none x

7

def listDelete(self,x):

# usuwa wezel x z listy # lista dwukierunkowa cykliczna z wartownikiem x.prev.next = x.next x.next.prev = x.prev

(22)

szukanie - wersja z wartownikiem

def listSearch(self,k):

# szuka wezla zawierajacego klucz k # lista dwukierunkowa cykliczna z wartownikiem

x = self.none.next while x!=None and x.key!=k:

x = x.next

return x # wynik “none” oznacza, ze szukanego klucza # nie ma na liscie

zlożoność pesym. Θ(n), n - ilość elementów

Cytaty

Powiązane dokumenty

Wypróbuj różne kształty i powiedz, który z nich powoduje przepływ powietrza najbardziej laminarny, a który burzliwy.. Dawid

Zatem w modelu geometrii hiperbolicznej istnieją dwie proste przechodzące przez punkt x (tak naprawdę nieskończenie wiele), które nie przecinają prostej L.. Pokazaliśmy w ten

Ogół zasad umożliwiających przedstawienie liczb za pomocą umownych znaków przyjęto nazywać systemem liczbowym, a znaki, za pomocą których zapisuje się obecnie liczby

e)Dysk twardy – jest to element komputera mający na celu przechowywania różnych plików. Jego zaletą jest mniejsza cena i mniejsze zajmowanie przestrzeni komputera. Wadą jest

Jeżeli mianowicie zakładamy, że funkcja pojawia się jako logiczne następstwo pewnej konfiguracji przyczynowej, to oczywiście nie może być tej konfiguracji

Azja, ponieważ część zawsze jest mniejsza od całości.Je- śli założymy, że nad Odrą i Wisłą można było jeszcze wczoraj spotkać 38 mln Polaków, to okazuje się, że Chiny

Tworzenie nowych grup łamania jest możliwe w kreatorze raportu (przy wybraniu odpowiedniego rozkładu) lub w modelu danych poprzez „wyciągnięcie” kolumny na zewnątrz grupy w

Udowodni¢, »e odejmowanie na Z nie ma elementu neutralnego i »e nie jest