STOSY ABSTRACT DATA TYPES (ADT) STOS ADT ZASTOSOWANIA STOSÓW WYJĄTKI PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI STOSY, KOLEJKI, LISTY

Podobne dokumenty

Dynamiczne struktury danych

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

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

Programowanie i struktury danych 1 / 44

Struktura danych = system relacyjny U, U uniwersum systemu - zbiór relacji (operacji) na strukturze danych

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

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne 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)

Paradygmaty programowania. Paradygmaty programowania

Algorytmy i Struktury Danych.

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Graf skierowany. Graf zależności dla struktur drzewiastych rozgrywających parametrycznie

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

E S - uniwersum struktury stosu

Struktury danych (I): kolejka, stos itp.

Programowanie obiektowe

Metody optymalizacji. dr inż. Paweł Zalewski Akademia Morska w Szczecinie

Marcin Matusiak i Łukasz Stasiak

Szablony funkcji i szablony klas

Spis treści JĘZYK C - FUNKCJE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF07Z

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wykład 4. Klasa List Kolejki Stosy Słowniki

Podstawy programowania obiektowego

Stos LIFO Last In First Out

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

Kurs programowania. Wykład 9. Wojciech Macyna

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Struktury danych: stos, kolejka, lista, drzewo

C++ Przeładowanie operatorów i wzorce w klasach

Monitory. Jarosław Kuchta

Programowanie obiektowe

Algorytmy i Struktury Danych. Anna Paszyńska

Wprowadzenie do szablonów klas

Algorytmy i Struktury Danych.

Programowanie w języku Java. Kolekcje

Lista, Stos, Kolejka, Tablica Asocjacyjna

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Wstęp do programowania

Podstawy informatyki 2

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Listy, kolejki, stosy

Struktury Danych i Złożoność Obliczeniowa

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Struktury. Przykład W8_1

Wprowadzenie do szablonów szablony funkcji

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

. Podstawy Programowania 2. Kolejki i ich zastosowania. Arkadiusz Chrobot. 21 marca 2016

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

WYKŁAD 11 OPTYMALIZACJA WIELOKRYTERIALNA

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i Struktury Danych

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Listy powiązane zorientowane obiektowo

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

Wprowadzenie do szablonów szablony funkcji

Teoretyczne podstawy informatyki

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

Język programowania: Lista instrukcji (IL Instruction List)

Wstęp do programowania. Stosy i kolejki. Piotr Chrząstowski-Wachtel

Algorytmy i język C++

Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

. Podstawy Programowania 2. Algorytmy dfs i bfs. Arkadiusz Chrobot. 2 czerwca 2019

Podstawy Programowania 2 Kolejki i ich zastosowania. Plan. Kolejki i ich klasyfikacja. Kolejki i ich klasyfikacja Kolejki dwustronne. Notatki.

Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Animacja. Algorytm DFS Animacja. Notatki. Notatki.

Klasy abstrakcyjne, interfejsy i polimorfizm

Abstrakcyjne struktury danych w praktyce

Programowanie i struktury danych

Programowanie w języku C++

ZASADY PROGRAMOWANIA KOMPUTERÓW

Stos liczb całkowitych

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Abstrakcyjny typ danych

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Wykład 4: Klasy i Metody

Programowanie obiektowe

Lab 9 Podstawy Programowania

Podstawy programowania w języku C++

Rodzajowy rachunek kosztów Wycena zuŝycia materiałów

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Zaawansowane programowanie w C++ (PCP)

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania

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

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

Szablony funkcji i klas (templates)

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

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

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

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

Podstawy programowania obiektowego

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Transkrypt:

PROJEKTOWNIE LGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI STOSY, KOLEJKI, LISTY STOSY 1 Wykład 3 d inż. Łukasz Jeleń Na podstawie wykładów d. T. Fevensa 2 STRCT DT TYPES (DT) STOS DT bstact data type (DT) jest abstakcją stuktuy danych DT deiniuje: Pzechowywane dane Opeacje na danych Deinicję możliwych błędów tych opeacji Pzykład: DT modelujące posty system obotu papieami watościowymi Pzechowywane dane to zamówienia kupna/spzedaży Dostępne opeacje: zamówienie kupna(akcja, udziały, cena) zamówienie spzedaży(akcja, udziały, cena) void cancel(zamówienie) Wyjątki: Kupno/Spzedaż nieistniejąca akcja Cancel nieistniejące zamównienie DT dla stosu pzechowuje dowolne obiekty Dodawanie i usuwanie wykonywane jest na zasadzie LIFO - Last-in Fist-out Można pzyównać do zabawki dozującej cukieki (PEZ) Opeacje na stosie: push(element): dodawanie elementu element pop(): usuwa i zwaca element z wiezchu stosu Dodatkowe opeacje na stosach: object top(): zwaca ostatni element umieszczony na stosie bez jego usuwania intege size(): zwaca ilość pzechowywanych elementów boolean isempty(): mówi, czy są jakieś elementy pzechowywane na stosie 3 4 WYJĄTKI ZSTOSOWNI STOSÓW Póba wywołania opeacji DT może czasami powadzić do wystąpienia błędów, któe nazywamy wyjątkami Exceptions Wyjątki są wyzucane (thown) pzez opeacje i nie mogą być wykonywane Dla stosu opeacje pop i top nie mogą zostać wykonane, jeśli stos jest pusty Póba wywołania metody pop i top dla pustego stosu wyzuci wyjątek EmptyStackException Zastosowania bezpośednie Histoia odwiedzanych ston w pzeglądace intenetowej Sekwencja opeacji conij w edytoze tekstu Łańcuch wywołania metod w Witualnej maszynie Javy Zastosowania pośednie Pomocnicza stuktua danych dla algoytmów Składowa innych stuktu danych 5 6

STOS WYWOŁŃ W C++ STOS WYWOŁŃ W C++ C++ kontoluje łańcuch wywołań unkcji za pomocą stosu Kiedy jakaś unkcja jest wywoływana, system dodaje do stosu amkę zawieającą: Zmienne lokalne i watość zwacaną z unkcji Licznik pogamu kontolujący wywoływane Jeśli unkcja kończy swoje działanie, to amka jest pobieana ze stosu (pop()), a kontola jest pzekazywana do metody na góze stosu. Pozwala na stosowanie ekuencji main() { int i = 5; oo(i); oo(int j) { int k; k = j+1; ba(k); ba(int m) { main PC = 2 i = 5 C++ kontoluje łańcuch wywołań unkcji za pomocą stosu Kiedy jakaś unkcja jest wywoływana, system dodaje do stosu amkę zawieającą: Zmienne lokalne i watość zwacaną z unkcji Licznik pogamu kontolujący wywoływane Jeśli unkcja kończy swoje działanie, to amka jest pobieana ze stosu (pop()), a kontola jest pzekazywana do metody na góze stosu. Pozwala na stosowanie ekuencji main() { int i = 5; oo(i); oo(int j) { int k; k = j+1; ba(k); ba(int m) { oo PC = 3 j = 5 k = 6 main PC = 2 i = 5 7-1 7-2 STOS WYWOŁŃ W C++ STOS WYWOŁŃ W C++ C++ kontoluje łańcuch wywołań unkcji za pomocą stosu Kiedy jakaś unkcja jest wywoływana, system dodaje do stosu amkę zawieającą: Zmienne lokalne i watość zwacaną z unkcji Licznik pogamu kontolujący wywoływane Jeśli unkcja kończy swoje działanie, to amka jest pobieana ze stosu (pop()), a kontola jest pzekazywana do metody na góze stosu. Pozwala na stosowanie ekuencji main() { int i = 5; oo(i); oo(int j) { int k; k = j+1; ba(k); ba(int m) { ba PC = 1 m = 6 oo PC = 3 j = 5 k = 6 main PC = 2 i = 5 C++ kontoluje łańcuch wywołań unkcji za pomocą stosu Kiedy jakaś unkcja jest wywoływana, system dodaje do stosu amkę zawieającą: Zmienne lokalne i watość zwacaną z unkcji Licznik pogamu kontolujący wywoływane Jeśli unkcja kończy swoje działanie, to amka jest pobieana ze stosu (pop()), a kontola jest pzekazywana do metody na góze stosu. Pozwala na stosowanie ekuencji main() { int i = 5; oo(i); oo(int j) { int k; k = j+1; ba(k); ba(int m) { oo PC = 3 j = 5 k = 6 main PC = 2 i = 5 7-3 7-4 STOS WYWOŁŃ W C++ STOS ZUJĄCY N TLICY C++ kontoluje łańcuch wywołań unkcji za pomocą stosu Kiedy jakaś unkcja jest wywoływana, system dodaje do stosu amkę zawieającą: Zmienne lokalne i watość zwacaną z unkcji Licznik pogamu kontolujący wywoływane Jeśli unkcja kończy swoje działanie, to amka jest pobieana ze stosu (pop()), a kontola jest pzekazywana do metody na góze stosu. Pozwala na stosowanie ekuencji main() { int i = 5; oo(i); oo(int j) { int k; k = j+1; ba(k); ba(int m) { main PC = 2 i = 5 Postym sposobem implementacji Stosu jest zastosowanie tablicy Dodajemy elementy od lewej do pawej Dodatkowa zmienna kontolująca indeks elementu na wiezchu stosu S lgoytm size() etun t + 1 lgoytm pop() i isempty() then thow EmptyStackException else t t 1 etun S[t + 1] 0 1 2 t N-1 7-5 8

STOS ZUJĄCY N TLICY WYDJNOŚĆ I OGRNICZENI Tablica pzechowująca elementy stosu może się zapełnić Opeacja push() powinna zatem wyzucać wyjątek FullStackException Oganiczenie związane z implementacją bazującą na tablicy Nie zawsze występujące pzy implementacji stosu S lgoytm push(e) i t = S.length 1 then thow FullStackException else t t + 1 S[t] e 0 1 2 t Wydajność Niech n będzie ilością elementów na stosie Wykozystane miejsce będzie ówne O(n) Każda opeacja będzie działała w czasie O(1) Oganiczenia Maksymalny ozmia stosu musi zostać zdeiniowany a pioi i nie może zostać zmieniony Póba dodania nowego elementu do pełnego stosu powoduje wyjątki typowe dla danej implementacji 9 10 STOS ZUJĄCY N POWIĘKSZNEJ TLICY PORÓWNNIE STRTEGII Wykonując opeację push, kiedy tablica jest pełna, zamiast wyzucania wyjątku, możemy możemy zastąpić ją większą tablicą Jak duża powinna być nowa tablica? Stategia inkementalna: zwiększ ozmia o stałą c Stategia podwajania: podwój ozmia tablicy lgoytm push(e) i t = S.length 1 then nowa tablica o ozmiaze o i 0 to t do [i] S[i] S t t + 1 S[t] e Poównamy stategię inkementalną i podwajania popzez analizę całkowitego czasu T(n) niezbędnego do wykonania n opeacji push() Zakładamy, że ozpoczynamy od pustego stosu epezentowanego pzez tablicę o ozmiaze 1 Czasem śednim będzie śedni czas opeacji push niezbędny do wykonania seii opeacji, np.: T(n)/n 11 12 STRTEGI INKREMENTLN Tablica zostanie zastąpiona k = n/c azy Całkowity czas T(n) wykonania n opeacji push jest popocjonalny do: STRTEGI PODWJNI Tablica zostanie zastąpiona k = log 2 n azy n + c + 2c + 3c + 4c + + kc = n + c(1 + 2 + 3 + + k) = n + ck(k + 1)/2 Ponieważ c jest stałą, T(n) jest w O(n +k 2 ), tj. O(n 2 ) Śedni czas opeacji push jest w O(n) Całkowity czas T(n) wykonania n opeacji push jest popocjonalny do: n + 1 + 2 + 4 + 8 + + 2 k = T(n) jest w O(n) n + 2 k+1-1 = 2n -1 Śedni czas opeacji push jest w O(1) ciąg geometyczny 2 4 1 1 8 13 14

INTERFEJS STOSU W C++ STOS ZUJĄCY N TLICY W C++ Inteejs jest odniesieniem do DT stosu Wymaga zdeiniowania klasy EmptyStackException Najbadziej zbliżoną konstukcją jest vecto template <typename Object> class Stack{ public: int size(); bool isempty(); Object& top() thow(emptystackexception); void push(object o); Object pop() thow(emptystackexception); template <typename Object> class TabStack{ pivate: int pojemnosc; //pojemność stosu Object *S //tablica stosu int top //góa stosu public: TabStack(int p){ pojemnosc = p; S = new Object[pojemnosc]; top = -1; bool isempty() {etun (top<0); Object pop() thow(emptystackexception){ i (isempty()) thow EmptyStackException ( Dostęp do pustego stosu ); etun S[top--]; // pozostałe unkcje ominięte 15 16 SPRWDZNIE DOPSOWNI NWISÓW Każdy nawias (, {, lub [ musi być spaowany z odpowiadającym mu nawiasem ),, lub ] pawidłowo: ( )(( )){([( )]) pawidłowo: (( )(( )){([( )])) błędnie: )(( )){([( )]) błędnie: ({[ ]) błędnie: ( 17 DOPSOWNIE NWISÓW - LGORYTM lgoytm DopNawiasow(X,n): Wejście: Tablica X z n tokenami, z któych każdy jest albo symbolem gupującym, zmienną, opeatoem aytmetycznym lub liczbą Wyjście: tue wtedy i tylko wtedy, gdy symbole gupujące w X są dopasowane Niech S będzie pustym stosem o i 0 to n-1 do i X[i] jest symbolem otwieającym then S.push(X[i]) else i X[i] jest symbolem zamykającym then i S.isEmpty() then etun alse {nie było dopasowania i S.pop() nie jest dopasowaniem do X[i] then etun alse {niepawidłowy typ i S.isEmpty() then etun tue {wszystkie symbole zostały dopasowane else etun alse {niektóe symbole nigdy nie zostały dopasowane 18 KOLEJK DT KOLEJKI 19 Kolejka pzechowuje dowolne obiekty Dodawanie i usuwanie jest wykonywane według zasady FIFO - ist-in ist-out Elementy dodawane są na końcu kolejki, a usuwane z pzodu kolejki Główne opeacje na kolejce: enqueue(element): dodaje element na końcu kolejki element dequeue(): usuwa i zwaca element z początku kolejki Dodatkowe opeacje: element ont(): zwaca element na pzodzie listy bez usuwania go intege size(): zwaca ilość pzechowywanych elementów boolean isempty(): inomuje czy w kolejce są pzechowywane jakieś elementy Wyjątki Póba wywołania dequeue lub ont na pustej kolejce wyzuca EmptyueueException 20

PRZYKŁD KOLEJKI ZSTOSOWNI KOLEJEK Opeacja Wyjście enqueue(5) (5) enqueue(3) (5, 3) dequeue() 5 (3) enqueue(7) (3, 7) dequeue() 3 (7) ont() 7 (7) dequeue() 7 () dequeue() eo () isempty() tue() enqueue(9) (9) enqueue(7) (9, 7) size() 2 (9, 7) enqueue(3) (9, 7, 3) enqueue(5) (9, 7, 3, 5) dequeue() 9 (7, 3, 5) Zastosowanie bezpośednie Listy oczekujących, Dostęp do zasobów współdzielonych (np.:, dukaka), Multipogamming Zastosowania pośednie Pomocnicza stuktua danych dla algoytmów Składowa innych stuktu danych 21 22 KOLEJK ZUJĄC N TLICY Zastosowanie tablicy o ozmiaze N w sposób okężny/kolisty Dwie zmienne kontolują pzód i tył kolejki indeks piewszego elementu indeks następny do ostatniego elementu Pozycja w tablicy jest pusta koniguacja tadycyjna 0 1 2 0 1 2 koniguacja okólna OPERCJE N KOLEJCE Wykozystujemy opeato modulo lgoytm size() etun (N + ) mod N lgoytm isempty() etun ( = ) 0 1 2 0 1 2 23 24 OPERCJE N KOLEJCE OPERCJE N KOLEJCE Opeacja enqueue wyzuca wyjątek jeśli tablica jest pełna Wyjątek jest zależny od implementacji lgoytm enqueue(e) i size() = N 1 then thow FullueueException else [] e ( + 1) mod N Opeacja dequeue wyzuca wyjątek jeśli kolejka jest pusta Ten wyjątek jest okeślony w DT dla kolejki lgoytm dequeue() i isempty() then thow EmptyueueException else temp [] ( + 1) mod N etun temp 0 1 2 0 1 2 0 1 2 0 1 2 25 26

ZSTOSOWNIE : SYMULTORY SYSTEMU KOŁOWEGO Możemy zaimplementować symulato systemu kołowego (tzw. systemu każdy z każdym) z zastosowaniem kolejki,, popzez wielokotne wywoływanie następujących koków: 1. e.dequeue() 2. Obsługa elementu e 3..enqueue(e) Kolejka KOLEJK ZUJĄC N POWIĘKSZNEJ TLICY Wykonując opeację enqueue, kiedy tablica jest pełna, zamiast wyzucania wyjątku, możemy możemy zastąpić ją większą tablicą nalogicznie do poceduy, któą omawialiśmy w pzypadku stosu Opeacja enqueue ma śedni czas działania: 1. Deque kolejny element 2. Obsłuż kolejny element Obsługa 3. Enqueue obsłużony element O(n) w pzypadku stategii inkementalnej O(1) w pzypadku stategii podwajającej 27 28 NIEFORMLNY INTERFEJS KOLEJKI W C++ Wymaga zdeiniowania klasy EmptyueueException ak wbudowanego odpowiednika w klasie STL template <typename Object> class ueue{ public: int size(); bool isempty(); Object& ont() thow(emptyueueexception); void enqueue(object o); Object dequeue() thow(emptyueueexception); LISTY 29 30 LISTY JEDNOKIERUNKOWE DEFINICJ WĘZŁ DL ELEMENTÓW LISTY element Węzeł Lista jednokieunkowa jest konketną stuktuą danych składającą się z sekwencji węzłów Każdy węzeł pzechowuje: element link do następnego węzła element następny węzeł template <typename E> class SNode{ pivate: E elem; SNode<E>* iend class SLinkedList<E> ; //węzeł listy jednokie. //watość elementu listy //następny elem. listy //dostęp dla listy //metody dostępu do danych: public E getelement() {etun elem; //metody modyikujące: public void setelement(e newe) {elem = newe; C D public SNode getnext() {etun ; public void setnext(node<e> newn) { = newn; 31 32

INTERFEJS KOLEJKI JEDNOKIERUNKOWEJ W C++ DODWNIE N POCZĄTKU template <typename E> class SLinkedList{ public: SLinkedList(); ~SLinkedList(); bool empty() const; const E& ont() const; void addfont(const E& e) void emovefont() pivate: SNode<E>* head; ; //lista jednokieunkowa //konstukto //destukto //spawdzanie czy lista jest pusta //zwaca piewszy element //dodawanie na początek listy //usuń piewszy element listy //początek listy 1. lokacja nowego węzła 2. Dodanie nowego elementu 3. Dodać powiązanie tak, aby nowy węzeł wskazywał na początek listy (stay head) 4. Uaktualnić head tak, aby wskazywało na nowy węzeł 33 34 ZSTOSOWNIE KLSY SNODE USUWNIE Z PRZODU LISTY template <typename E> SLinkedList<E>::SLinkedList :head(null){ template <typename E> void SLinkedList<E>::addFont(const E& e){ SNode<E>* v = new SNode<E>; v->elem = e; v-> = head; head = v; template <typename E> void SLinkedList<E>::emoveFont(){ SNode<E>* old = head; head = old->; delete old; //konstukto //twozy pustą listę //dodawanie na pzodzie listy //twozy nowy węzeł //zapis danych //v wskazuje na head //v jest teaz head //usuwanie z pzodu listy //zapis bieżącego head //ominięcie staego head //usunięcie old 1. Uaktualnić head tak, aby wskazywało na kolejny element w liście 2. Usunąć piewszy węzeł 35 36 DODWNIE Z TYŁU LISTY 1. lokacja nowego węzła 2. Dodanie nowego elementu 3. Dodać powiązanie tak, aby nowy węzeł wskazywał na 4. Dodać powiązanie tak, aby ostatni element wskazywał na nowy węzeł 5. Uaktualnić tail tak, aby wskazywało na nowy węzeł USUWNIE Z TYŁY LISTY Usuwanie elementów z tyłu listy jednokieunkowej nie jest wydajne! Nie da się pzepowadzić uaktualnienia tail tak, aby wskazywał na węzeł popzedzający w stałym czasie 37 38

LIST JEDNOKIERUNKOW JKO STOS Możemy zaimplementować stos za pomocą listy jednokieunkowej Góny element jest pzechowywany w piewszym węźle listy Wykozystanie miejsca to O(n), a każda opeacja stosu jest wykonywana w czasie O(1) t węzły LIST JEDNOKIERUNKOW JKO KOLEJK Możemy zaimplementować kolejkę za pomocą listy jednokieunkowej Element początkowy jest pzechowywany w piewszym węźle Ostatni element jest pzechowywany w ostatnim węźle Wykozystane miejsce to O(n), a każda opeacja kolejki jest wykonywana w czasie O(1) węzły elementy elementy 39 40 Node<Sting> = new Node<Sting>(); Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); 41-1 41-2 Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; ed ed 41-3 41-4

Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; = ; // jest eeencją do obiektu ed ed 41-5 41-6 Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; = ; // jest eeencją do obiektu Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; = ; // jest eeencją do obiektu ->setelement(new Sting( PMSI )); ed ed 41-7 41-8 Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; = ; // jest eeencją do obiektu ->setelement(new Sting( PMSI )); PMSI ed Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; = ; // jest eeencją do obiektu ->setelement(new Sting( PMSI )); ->setelement(new Sting( Montéal )); PMSI ed 41-9 41-10

Node<Sting> = new Node<Sting>(); ->setelement(new Sting( ed )); Node<Sting> = ; = ; // jest eeencją do obiektu ->setelement(new Sting( PMSI )); ->setelement(new Sting( Montéal )); PMSI ed Montéal II ->setnext(new Node<Sting>( PW,)); // konstukto PMSI 41-11 42-1 II ->setnext(new Node<Sting>( PW,)); // konstukto II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); PMSI PW PMSI PW 42-2 42-3 II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); =.getnext(); PMSI Wykład PW PMSI Wykład PW 42-4 42-5

II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); =.getnext(); II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); =.getnext(); PMSI Wykład PW PMSI Wykład PW 42-6 42-7 II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); =.getnext();.setnext(new Node<Sting>( Laboatoium,)); ; II ->setnext(new Node<Sting>( PW,)); // konstukto.getnext().setelement(new Sting( Wykład )); =.getnext();.setnext(new Node<Sting>( Laboatoium,)); ; PMSI Wykład PW PMSI Wykład PW Laboatoium 42-8 42-9