Algorytmy i Struktury Danych.

Podobne dokumenty
Algorytmy i Struktury Danych.

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Algorytmy i Struktury Danych.

Dynamiczne struktury danych

ALGORYTMY I STRUKTURY DANYCH

Wstęp do programowania

Algorytmy i Struktury Danych.

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Algorytmy i Struktury Danych.

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Struktury danych. przez użytkownika, jak to ma miejsce w przypadku zwykłych zmiennych statycznych.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Drzewa wyszukiwań binarnych (BST)

Wysokość drzewa Głębokość węzła

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych.

Porządek symetryczny: right(x)

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Podstawy Programowania 2 Dwukierunkowa lista liniowa. Plan. Wstęp. Implementacja. Notatki. Notatki. Notatki. Notatki.

Wykład 6. Drzewa poszukiwań binarnych (BST)

Dynamiczne struktury danych

Wykład 6. Dynamiczne struktury danych

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Podstawowe struktury danych

Algorytmy i Struktury Danych.

Struktury danych: stos, kolejka, lista, drzewo

Drzewa poszukiwań binarnych

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Przykładowe B+ drzewo

Algorytmy i Struktury Danych.

Wykład 2. Drzewa poszukiwań binarnych (BST)

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie i struktury danych

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Programowanie Proceduralne

Algorytmy i Struktury Danych.

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Wstęp do Informatyki

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Programowanie obiektowe

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Algorytmy i struktury danych. wykład 5

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Listy, kolejki, stosy

Lista dwukierunkowa - przykład implementacji destruktorów

Struktury dynamiczne

Struktury. Przykład W8_1

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Drzewa poszukiwań binarnych

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Rekurencyjne struktury danych

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Programowanie Proceduralne

Listy i operacje pytania

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Programowanie w VB Proste algorytmy sortowania

. Podstawy Programowania 2. Dwukierunkowa lista liniowa. Arkadiusz Chrobot. 7 kwietnia 2019

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

. Podstawy Programowania 2. Jednokierunkowa lista liniowa. Arkadiusz Chrobot. 28 marca 2017

Programowanie Procedurale

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

KOLEJKA (QUEUE) (lista fifo first in, first out)

Algorytmy i Struktury Danych.

Zmienne i struktury dynamiczne

Wstęp do programowania 1

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Podstawy informatyki 2

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Paradygmaty programowania. Paradygmaty programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

Podstawy Programowania 2 Jednokierunkowa lista liniowa. Plan. Jednokierunkowa lista liniowa. Jednokierunkowa lista liniowa. Notatki. Notatki.

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Podstawy Programowania. Listy i stosy

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

. Podstawy Programowania 2. Dwukierunkowa lista cykliczna. Arkadiusz Chrobot. 24 kwietnia 2016

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

Drzewa czerwono-czarne.

Wstęp do programowania 1

E S - uniwersum struktury stosu

Struktury Danych i Złożoność Obliczeniowa

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Algorytmy i Struktury Danych.

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Lista dwukierunkowa. Grzegorz Wasylów Konrad Wojtoń

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

Algorytmy i Struktury Danych. Liniowe struktury danych - Lista uporzadkowana. Wartownicy. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 1 / 28

Dołaczanie elementu do uporzadkowanej listy jednokierunkowej Algorytm dołaczania elementu do uporzadkowanej listy jednokierunkowej Cel: Dodanie nowego elementu do listy uporzadkowanej; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 2 / 28

Dołaczanie elementu do uporzadkowanej listy jednokierunkowej Algorytm dołaczania elementu do uporzadkowanej listy jednokierunkowej Cel: Dodanie nowego elementu do listy uporzadkowanej; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Dołaczany element; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 2 / 28

Dołaczanie elementu do uporzadkowanej listy jednokierunkowej Algorytm dołaczania elementu do uporzadkowanej listy jednokierunkowej List-Insert(L,x) 1: if head[l] = NIL then 2: head[l] := x; next[x] := NIL; 3: else 4: y := head[l]; z := NIL; 5: while (y! = NIL) and (key[x] > key[y]) do 6: z := y; 7: y := next[y]; 8: end while 9: next[x] = y; 10: next[z] = x; 11: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 3 / 28

Dołaczanie elementu do uporzadkowanej listy jednokierunkowej Złożoność Procedura List-Insert(L, x) przyłacza element x (dla którego pole key zostało wcześniej zainicjowane) na wskazane porzadkiem miejsce listy jednokierunkowej. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć miejsce dla elementu x, to pesymistyczny czas działania procedury List-Insert na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 4 / 28

Dołaczanie elementu do uporzadkowanej listy jednokierunkowej - pewna implementacja Definicja listy jednokierunkowej typedef long T; typedef struct NODE { T value; struct NODE* next; } Node; typedef struct { Node* first; Node* last; } List; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 5 / 28

Dołaczanie elementu do uporzadkowanej listy jednokierunkowej - pewna implementacja int insert (List *L, T nazwa); int insert (List *L, T value) { Node *new, *curr, *prev; new= (Node*)malloc(sizeof(Node)); /* Utwórz element Node*/ if(new == NULL){ /* weryfikacja przydzielonej pamieci*/ printf("nie udalo sie przydzielic pamieci"); return 1; } else{ /* Ustal dane elementarne w Node*/ new-> value = value; new-> next= NULL; } if( L->first == NULL) { L->first = new; } else{ /* Znajdz miejsce wstawienia */ curr = L->first; prev = NULL; while((curr!= NULL) && (value > curr->value)){ prev= curr; curr= curr-> next; } /*Wstaw element w miejsce miedzy prev a curr*/ new->next= curr; if (prev!= NULL) prev->next= new; else L->first = new; } return 0; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 6 / 28

Dołaczanie elementu do uporzadkowanej listy dwukierunkowej Algorytm dołaczania elementu do uporzadkowanej listy dwukierunkowej Cel: Dodanie nowego elementu do listy uporzadkowanej; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 7 / 28

Dołaczanie elementu do uporzadkowanej listy dwukierunkowej Algorytm dołaczania elementu do uporzadkowanej listy dwukierunkowej Cel: Dodanie nowego elementu do listy uporzadkowanej; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Dołaczany element; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 7 / 28

Dołaczanie elementu do uporzadkowanej listy dwukierunkowej Algorytm dołaczania elementu do uporzadkowanej listy dwukierunkowej List-Insert2(L,x) 1: if head[l] = NIL then 2: head[l] := x; next[x] := NIL; prev[x] := NIL 3: else 4: y := head[l]; 5: while (y! = NIL) and (key[x] > key[y]) do 6: y := next[y]; 7: end while 8: if y! = NIL then 9: next[x] := y; prev[x] := prev[y]; next[prev[y]] := x; prev[y] := x; 10: end if 11: else 12: next[x] := NIL; prev[x] = tail[l]; next[tail[l]] := x; tail[l] := x; 13: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 8 / 28

Dołaczanie elementu do uporzadkowanej listy dwukierunkowej Złożoność Procedura List-Insert2(L, x) przyłacza element x (dla którego pole key zostało wcześniej zainicjowane) na wskazane porzadkiem miejsce listy dwukierunkowej. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć miejsce dla elementu x, to pesymistyczny czas działania procedury List-Insert2 na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 9 / 28

Dołaczanie elementu do uporzadkowanej listy dwukierunkowej - pewna implementacja Definicja listy dwukierunkowej typedef long T; typedef struct NODE { T value; struct NODE* next; struct NODE* prev; } Node; typedef struct { Node* first; Node* last; } List2; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 10 / 28

Dołaczanie elementu do uporzadkowanej listy dwukierunkowej - pewna implementacja int insert (List2 *L, T value); int insert (List2 *L, T value) { // Zadanie na ćwiczenia // Napisz definicje!!! } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 11 / 28

Usuwanie elementu z uporzadkowanej listy jednokierunkowej Algorytm usuwania elementu z uporzadkowanej listy jednokierunkowej Cel: Usunięcie danego elementu z uporzadkowanej listy jednokierunkowej; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 12 / 28

Usuwanie elementu z uporzadkowanej listy jednokierunkowej Algorytm usuwania elementu z uporzadkowanej listy jednokierunkowej Cel: Usunięcie danego elementu z uporzadkowanej listy jednokierunkowej; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Usuwany element; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 12 / 28

Usuwanie elementu z uporzadkowanej listy jednokierunkowej Algorytm usuwania elementu z uporzadkowanej listy jednokierunkowej Cel: Usunięcie danego elementu z uporzadkowanej listy jednokierunkowej; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Usuwany element; Algorytm - schemat Jeżeli dane sa zgodne z danymi pierwszego elementu listy, usuń pierwszy element listy; Znajdź element do usunięcia na liście; Jeżeli znaleziono, usuń znaleziony element z listy; Jeżeli nie znaleziono elementu, generuj komunikat; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 12 / 28

Usuwanie elementu z uporzadkowanej listy jednokierunkowej Algorytm usuwania elementu z uporzadkowanej listy jednokierunkowej List-Del(L,x) 1: if head[l]! = NIL then 2: if head[l] = x then 3: head[l] := next[x]; 4: else 5: y := head[l]; 6: while (next[y]! = x) do 7: y := next[y]; 8: end while 9: next[y] := next[x]; 10: end if 11: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 13 / 28

Usuwanie elementu z uporzadkowanej listy jednokierunkowej Złożoność Procedura List-Del(L, k) usuwa element o kluczu k z uporzadkowanej listy jednokierunkowej. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć element o kluczu k, to pesymistyczny czas działania procedury List-Del na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 14 / 28

Usuwanie elementu z uporzadkowanej listy jednokierunkowej - pewna implementacja int delete(list *L, T value); int delete(list *L, T value){ Node *prev, *curr, *temp; if(l->first== NULL) return 1; /* Lista pusta */ else{ if(value == L->first->value){ temp = L->first; L->first = L->first->next; free(temp); }else{ /* znajdz w liscie element do usuniecia*/ prev = L->first; curr = L->first->next; while(curr!= NULL && curr->value!= value) { prev= curr; curr = curr->next; } if(curr == NULL) return 1; /* element nie zostalznaleziony */ else{ /* Usun znaleziony element */ temp = currptr; prev->next= curr->next; free(temp); } } } return 0; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 15 / 28

Usuwanie elementu z uporzadkowanej listy dwukierunkowej Algorytm usuwania elementu z uporzadkowanej listy dwukierunkowej Cel: Usunięcie danego elementu z uporzadkowanej listy dwukierunkowej; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 16 / 28

Usuwanie elementu z uporzadkowanej listy dwukierunkowej Algorytm usuwania elementu z uporzadkowanej listy dwukierunkowej Cel: Usunięcie danego elementu z uporzadkowanej listy dwukierunkowej; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Usuwany element; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 16 / 28

Usuwanie elementu z uporzadkowanej listy dwukierunkowej Algorytm usuwania elementu z uporzadkowanej listy dwukierunkowej Cel: Usunięcie danego elementu z uporzadkowanej listy dwukierunkowej; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Usuwany element; Algorytm - schemat Jeżeli dane sa zgodne z danymi pierwszego elementu listy, usuń pierwszy element listy; Znajdź element do usunięcia na liście; Jeżeli znaleziono, usuń znaleziony element z listy; Jeżeli nie znaleziono elementu, generuj komunikat; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 16 / 28

Usuwanie elementu z uporzadkowanej listy dwukierunkowej Algorytm usuwania elementu z uporzadkowanej listy dwukierunkowej List-Insert2(L,x) 1: if head[l]! = NIL then 2: if key[head[l]] = key[x]; then 3: head[l] := next[x]; prev[head[l]] := NIL 4: else 5: y := head[l]; z := NIL; 6: while (key[x]! = key[y]) do 7: z := y; y := next[y]; 8: end while 9: if y! = NIL then 10: next[z] := next[y]; prev[next[y]] := z; 11: end if 12: end if 13: end if Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 17 / 28

Usuwanie elementu z uporzadkowanej listy dwukierunkowej Złożoność Procedura List-Del2(L, k) usuwa element o kluczu k z uporzadkowanej listy dwukierunkowej. Ponieważ niekiedy potrzebne jest przejście całej listy L, aby znaleźć element o kluczu k, to pesymistyczny czas działania procedury List-Del2 na liście o n elementach wynosi O(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 18 / 28

Usuwanie elementu z uporzadkowanej listy dwukierunkowej - pewna implementacja int delete (List2 *L, T value); int delete (List2 *L, T value) { // Zadanie na ćwiczenia // Napisz definicje!!! } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 19 / 28

Wartownicy Wartownik jest sztucznym elementem, który pozwala uprościć warunki brzegowe. Przyjmijmy dla przykładu, iż z dwukierunkowa lista L jest zwiazany element nil[l], który odgrywa role stałej NIL, ale jest rekordem o takich samych polach jak wszystkie zwykłe elementy listy. Każde wystapienie stałej NIL w naszych procedurach zamieniamy na wskaźnik do wartownika nil[l]. Sprawia to, że zwykła lista dwukierunkowa staje sie w istocie lista cykliczna, w której wartownik nil[l] znajduje się między głowa a ogonem. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 20 / 28

Wartownicy Pole next[nil[l]] wskazuje na głowe listy, a pole prev[nil[l]] wskazuje na ogon listy. Ponieważ pole next[nil[l]] wskazuje na głowę listy nie ma potrzeby pamiętania atrybutu head[l]. Wystarczy zastapić wszystkie odwołania do niego przez next[nil[l]]. Lista pusta składa się z samego wartownika i wtedy oba pola next[nil[l]] oraz prev[nil[l]] wskazuja na nil[l]. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 21 / 28

Wartownicy Wartownik zaznaczony został kolorem ciemnoszarym. Jest to cykliczna lista dwukierunkowa, w której wartownik znajduje się zawsze między głowa a ogonem. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 22 / 28

Wartownicy Wartownik zaznaczony został kolorem ciemnoszarym. Jest to cykliczna lista dwukierunkowa, w której wartownik znajduje się zawsze między głowa a ogonem. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 23 / 28

Wstawianie elementu do listy dwukierunkowej z wartownikiem Algorytm wstawienia elementu do listy dwukierunkowej z wartownikiem Cel: Wstawianie danego elementu do listy dwukierunkowej z wartownikiem; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 24 / 28

Wstawianie elementu do listy dwukierunkowej z wartownikiem Algorytm wstawienia elementu do listy dwukierunkowej z wartownikiem Cel: Wstawianie danego elementu do listy dwukierunkowej z wartownikiem; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Element do wstawienia; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 24 / 28

Wstawianie elementu do listy dwukierunkowej z wartownikiem Algorytm wstawienia elementu do listy dwukierunkowej z wartownikiem Cel: Wstawianie danego elementu do listy dwukierunkowej z wartownikiem; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Element do wstawienia; Ponieważ można pominać warunki brzegowe dotyczace głowy i ogona listy, treść procedury List-Insert-Begin(L, x) znacznie się uprościła: List-Insert-Begin(L,x) 1: prev[next[nil[l]]] := x; 2: next[nil[l]] := x; 3: prev[x] := nil[l]; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 24 / 28

Usuwanie elementu z listy dwukierunkowej z wartownikiem Algorytm usuwania elementu z listy dwukierunkowej z wartownikiem Cel: Usunięcie wskazanego elementu z listy dwukierunkowej z wartownikiem; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 25 / 28

Usuwanie elementu z listy dwukierunkowej z wartownikiem Algorytm usuwania elementu z listy dwukierunkowej z wartownikiem Cel: Usunięcie wskazanego elementu z listy dwukierunkowej z wartownikiem; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Element do usunięcia; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 25 / 28

Usuwanie elementu z listy dwukierunkowej z wartownikiem Algorytm usuwania elementu z listy dwukierunkowej z wartownikiem Cel: Usunięcie wskazanego elementu z listy dwukierunkowej z wartownikiem; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Element do usunięcia; Ponieważ można pominać warunki brzegowe dotyczace głowy i ogona listy, treść procedury LIST-DELETE-2 znacznie się uprościła: List-Delete-2(L,x) 1: next[prev[x]]:= next[x]; 2: prev[next[x]]:= prev[x]; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 25 / 28

Wartownicy Lista ze slajdu 23 po wykonaniu procedury List-Insert-Begin(L, x), gdzie element wstawiany key[x]=3. Nowy element został umieszczony w głowie listy. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 26 / 28

Wartownicy Lista po usunieciu elementu o kluczu 1. W ogonie znajduje sie teraz element o kluczu 4. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 27 / 28

Wyszukiwanie elementu na liście Algorytm wyszukiwania elementu w liście dwukierunkowej z wartownikiem Cel: Wyszukanie elementu na liście z wartownikiem; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 28 / 28

Wyszukiwanie elementu na liście Algorytm wyszukiwania elementu w liście dwukierunkowej z wartownikiem Cel: Wyszukanie elementu na liście z wartownikiem; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Kryterium poszukiwania, np. wartość danej elementarnej; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 28 / 28

Wyszukiwanie elementu na liście Algorytm wyszukiwania elementu w liście dwukierunkowej z wartownikiem Cel: Wyszukanie elementu na liście z wartownikiem; Dane wejściowe: Położenie pierwszego elementu listy (np. wskaźnik na ten element); Kryterium poszukiwania, np. wartość danej elementarnej; Algorytm: List-Search(L,k) 1: x := next[nil[l]]; 2: while (x!=nil and key[x]!=k) do 3: x := next[x]; 4: end while 5: return x; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 28 / 28