ALGORYTMY I STRUKTURY DANYCH

15
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 07 Kolejki, listy, stosy Grażyna Mirkowska PJWSTK, semestr zimowy 2002/2003

description

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ń. - PowerPoint PPT Presentation

Transcript of ALGORYTMY I STRUKTURY DANYCH

Page 1: ALGORYTMY I STRUKTURY  DANYCH

ALGORYTMY I STRUKTURY DANYCH

WYKŁAD 07 Kolejki, listy, stosy

Grażyna Mirkowska

PJWSTK, semestr zimowy 2002/2003

Page 2: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 2

Plan wykładu

Kolejki– Specyfikacja

– implementacja

Listy Przykłady zastosowań

– Sito

– Obliczanie wartości wyrażeń

MOTTO Struktury danych modyfikują świat, w którym realizowany jest algorytm, usprawniają działanie, ułatwiają zrozumienie algorytmu.

Page 3: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 3

Abstrakcyjna struktura kolejek

Początek kolejki

Koniec kolejki

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

Page 4: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 4

Specyfikacja kolejek FIFO

Q = E Q , in, out, first, empty, =

in : E Q Qout : Q Qfirst Q Eempty : Q Bo

Sygnatura

empty(in(e,q))

empty(q) out(in(e,q)) = q

empty(q) first(in(e,q)) = e

empty(q) first(in(e,q)) = first(q)

empty(q) in(e,out(q)) = out(in(e,q))

Page 5: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 5

while empty(q) do q := out(q) od ten program nie zapętla się

q =q’ wttw Po wykonaniu programu P spełniony jest warunek(empty(q) empty(q’) b)

Specyfikacja kolejek FIFO

Q = E Q , in, out, first, empty, =

in : E Q Qout : Q Qfirst : Q Eempty : Q Bo

P = {b:=true; while (empty(q) empty(q’) b) do b := (first(q)=first(q’)); q := out(q); q’:= out(q’) ; od }

Page 6: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 6

Impelementacja kolejek

e1

PoczątekKoniec

e2 e3 en...

Public class kolejka( ){ ogniwo poczatek; ogniwo koniec; .....................

}

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 ogniwo (int e){ ogniwo next; ........}

Page 7: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 7

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

dwukierunkowaDwukierunkowa cykliczna

Page 8: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 8

Sito Eratostenesa

{ 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

tab[i] , o ile nie jest zerem, jest liczbą pierwszą

Wszystkie elementy tablicy różne od zera na pozycjach < i są liczbami pierwszymi

Page 9: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 9

Sito Eratostenesa

{ 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 }

Wartość=2

next

Wartość=3

next

Wartość=4

next

Wartość=5

next

poczatek

x

y

poprzedni

Page 10: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 10

Sito EratostenesaZnaleźć 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 pwszystkie liczby podzielne przez i

Page 11: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 11

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.

Obliczyć wartość danego wyrażenia algebraicznego.

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.

Page 12: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 12

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ę.

((x+(y*z))+(-u))

Stos argumentów

Stos operacji

x

+

y

*

z

+

xy*z

x+(y*z)

+-

ux+(y*z)

-u

+

x+(y*z)+(-u)

Page 13: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 13

Schemat blokowy algorytmu

Wpisz s[i] na stos operacji

s[i] jest operacją

włóż wartość s[i] na stos argumentów

s[i] jest zmienną

i := 1

tak

tak

nie

nies[i] =‘)’

Weź operację o ze stosu Weź ze stosu odpowiednią liczbę argumentów. Oblicz wynik operacji o na tych argumentach.

Usuń ze stosu wykonaną operacje i użyte argumenty

tak

Wpisz wynik na stos argumentów

i:=i+1

nie

i<n+1

Page 14: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 14

Wpisz s[i] na stos operacji OP

s[i] jest operacją

włóż wartość s[i] na stos argumentów ARG

s[i] jest zmienną

i := 1

tak

tak

nie

nies[i] =‘)’

O := top(OP);OP :=pop(OP);a := top(ARG);ARG := pop(ARG);

b:= top(ARG);ARG := pop(ARG);

a:= O(a,b)

tak

a := O(a)

i:=i+1

nie

i<n+1

O dwuargumentowa

ARG:= push(ARG,a)

taknie

Page 15: ALGORYTMY I STRUKTURY  DANYCH

listopad 2002 G. Mirkowska, ASD_07 Kolejki, listy, stosy 15

Zadanie do domu

Napisać implementację omówionego algorytmu obliczania wartości wyrażeń arytmetycznych.