150 likes | 346 Views
ALGORYTMY I STRUKTURY DANYCH. WYKŁAD 07 Kolejki, listy, stosy Grażyna Mirkowska PJWSTK, semestr zimowy 2002/2003. Plan wykładu. Kolejki Specyfikacja implementacja Listy Przykłady zastosowań Sito Obliczanie wartości wyrażeń.
E N D
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 07 Kolejki, listy, stosy Grażyna Mirkowska PJWSTK, semestr zimowy 2002/2003
Plan wykładu • Kolejki • Specyfikacja • implementacja • Listy • Przykłady zastosowań • Sito • Obliczanie wartości wyrażeń MOTTOStruktury danych modyfikują świat, w którym realizowany jest algorytm, usprawniają działanie, ułatwiają zrozumienie algorytmu. G. Mirkowska, ASD_07 Kolejki, listy, stosy
Koniec kolejki Początek kolejki Abstrakcyjna struktura kolejek Zasada -- FIFO pokaz Standardowa struktura kolejek First(e1,...en) = e1 , gdy n>0 i nieokr. w p.p. In((e1,...,en),e) = (e1,e2,...,en,e) Out(e1,...en) = (e2,...,en) , gdy n>0 i nieokr. w p.p. Empty(e) wttw e jest ciągiem pustym G. Mirkowska, ASD_07 Kolejki, listy, stosy
Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = empty(q) out(in(e,q)) = q in : E Q Qout : Q Qfirst Q Eempty : Q Bo empty(q) first(in(e,q)) = e Własności kolejek empty(in(e,q)) empty(q) first(in(e,q)) = first(q) Sygnatura empty(q) in(e,out(q)) = out(in(e,q)) G. Mirkowska, ASD_07 Kolejki, listy, stosy
Specyfikacja kolejek FIFO Q = E Q , in, out, first, empty, = in : E Q Qout : Q Qfirst : Q Eempty : Q Bo while empty(q) do q := out(q) od ten programnie zapętla się Własności Algorytmiczne P = {b:=true; while (empty(q)empty(q’) b) do b := (first(q)=first(q’)); q := out(q); q’:= out(q’) ; od } q =q’ wttw Po wykonaniu programu P spełniony jest warunek(empty(q) empty(q’) b) G. Mirkowska, ASD_07 Kolejki, listy, stosy
e1 e2 e3 en ... Początek Koniec Impelementacja kolejek Public class ogniwo (int e){ ogniwo next; ........} Public kolejka in (int e; kolejka q){ o = New ogniwo(e); o. next = null; if (q=null) {q = New kolejka(); q.początek = o;} else q.koniec.next = o; q.koniec = o; return q} Public class kolejka( ){ ogniwo poczatek; ogniwo koniec; ..................... } Koszty operacji ! G. Mirkowska, ASD_07 Kolejki, listy, stosy
... Listy Kolejki i Stosy są szczególnymi przykładami struktur listowych. • Operacje na listach • Dostęp do elementu listy • Podlista • Złożenie • wkładanie elementu • Usuwanie elementu Realizacje : - Tablicowa- dowiązaniowa Lista : jednokierunkowa, cykliczna dwukierunkowa Dwukierunkowa cykliczna G. Mirkowska, ASD_07 Kolejki, listy, stosy
Sito Eratostenesa z tablicą { for i := 2 to n do tab[i] := i od; for i := 2 to n do if tab[i] <>0 then for j := i+1 to n do if ( tab[j] mod i = 0) then tab[j] := 0; fi; od; fi od } Tablica wszystkich liczb naturalnych n Wykreślam z tablicy wszystkie liczby podzielne przez i Niezmiennik Wszystkie elementy tablicy różne od zera na pozycjach < i sąliczbami pierwszymi tab[i] , o ile nie jest zerem, jest liczbą pierwszą G. Mirkowska, ASD_07 Kolejki, listy, stosy
poczatek Wartość=4 Wartość=2 Wartość=3 Wartość=5 next next next next Sito Eratostenesa z listą { poczatek := new ogniwo(2); x := początek; for i := 3 to n do x.next:= new ogniwo(i); x:= x.next; od; x := początek; while x<>null do w:= x.wartość; poprzedni := x; y :=x.next; while y<>null do if ( y.wartość mod w = 0) then poprzedni.next := y.next; else poprzedni := y; fi; y := y.next; od; x:= x.next; od } x poprzedni y Jak to działa? G. Mirkowska, ASD_07 Kolejki, listy, stosy
Sito Eratostenesa z kolejką Znaleźć wszystkie liczby pierwsze n. { p:= null; wynik := null; for i := 2 to n do p := in(i,p) od; while not empty(p) do i := first(p); wynik := in(i,wynik); p := out(p); q:= null; while not empty(p) do if (first(p) mod i <>0) then q := in(first(p), q) fi; p := out(p) od; p := qod } Kolejka wynik zawiera wszystkie liczby pierwsze < first(p).Kolejka p zawiera liczby n, które nie dzielą się przez x wynik Usuwamy z kolejki p wszystkie liczby podzielne przez i G. Mirkowska, ASD_07 Kolejki, listy, stosy
Obliczanie wartości wyrażeń Zbiorem wyrażeń algebraicznych WA nazywać będziemy najmniejszy zbiór napisów nad alfabetem {x,y,z,u} {+,* -} {(,)} taki, że (1) x,y, z, u WA(2) jeśli w1, w2 WA , to (w1+w2) oraz (w1*w2) należą do WA,(3) Jeśli w WA, to (-w) WA. Definicja Obliczyć wartość danego wyrażenia algebraicznego. Zadanie Uwagi -założenia : 1. Wyrażenie jest zapisane w tablicy znakowej o elementach s[1],...,s[n].2. Wartości zmiennych są zapisane w obiekcie v, którego atrybutami są x,y,z,u. G. Mirkowska, ASD_07 Kolejki, listy, stosy
y*z -u x x+(y*z) Opis metody Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów, a kolejno spotkane operacje wpisujemy na stos operacji. Pojawienie się ‘)’ sygnalizuje, że można wykonać ostatnio zapamiętaną operację. Metoda ((x+(y*z))+(-u)) z y u x x+(y*z) x+(y*z)+(-u) Przykład Stos argumentów * - + + + + Stos operacji G. Mirkowska, ASD_07 Kolejki, listy, stosy
i := 1 Schemat blokowy algorytmu i<n+1 s[i] jest operacją tak nie Wpisz s[i] na stos operacji s[i] jest zmienną nie tak s[i] =‘)’ nie tak włóż wartość s[i] na stos argumentów Weź operację o ze stosu Weź ze stosu odpowiednią liczbę argumentów. Oblicz wynik operacji o na tych argumentach. i:=i+1 Usuń ze stosu wykonaną operacje i użyte argumenty Wpisz wynik na stos argumentów G. Mirkowska, ASD_07 Kolejki, listy, stosy
i := 1 i<n+1 A jaki jest koszt ? s[i] jest operacją tak nie Wpisz s[i] na stos operacji OP s[i] jest zmienną nie tak s[i] =‘)’ nie tak włóż wartość s[i] na stos argumentów ARG O := top(OP);OP :=pop(OP);a := top(ARG);ARG := pop(ARG); i:=i+1 O dwuargumentowa nie tak a := O(a) b:= top(ARG);ARG := pop(ARG);a:= O(a,b) G. Mirkowska, ASD_07 Kolejki, listy, stosy ARG:= push(ARG,a)
Zadanie do domu Napisać implementację omówionego algorytmu obliczania wartości wyrażeń arytmetycznych. G. Mirkowska, ASD_07 Kolejki, listy, stosy