Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék

Hasonló előadás


Az előadások a következő témára: "Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék"— Előadás másolata:

1 Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék szlavip@elte.hu http://people.inf.elte.hu/szlavi szlavip@elte.hu http://people.inf.elte.hu/szlavi

2  2014. 07. 13.Adatszerkezetek2/55 Tartalomjegyzék I. A kupac típuskonstrukció A kupac típuskonstrukcióA kupac típuskonstrukció II. A prioritási sor típuskonstrukció A prioritási sor típuskonstrukcióA prioritási sor típuskonstrukció

3  2014. 07. 13.Adatszerkezetek3/55 Tartalomjegyzék 0 A kupac-filozófia filozófia 1 A kupac algebrai specifikációja 1.1 Kupac-műveletek műveletek 1.2 Kupac-axiómák axiómák 2 A kupac típuskonstrukció specifikációja 2.1 A kupac exportmodulja exportmodulja 2.2 A kupac megvalósítási moduljai megvalósítási moduljaimegvalósítási moduljai I.

4  2014. 07. 13.Adatszerkezetek4/55 11 A Kupac-filozófia 1 A kupac olyan véges elemsokaság, amely rendelkezik az alábbi tulajdonságokkal: 1.Minden elemnek legfeljebb két rákövetkezője (leszármazottja) lehet. Azaz bináris fának tekinthető. 2.Minden részfájának gyökere kisebb (vagy egyenlő) a közvetlen leszármazottainál. 3.A kupac balról folytonos, azaz ha nem teljes a fa, akkor csak a legutolsó szintből hiányozhatnak elemek, de azok is csak a szint jobb széléről. Ezek következménye, hogy ábrázolható folytonosan is, tömbben. I. A rákövetkezés rendezési reláció, azaz „elemciklusok” nincsenek. Természetesen a nagyobb- egyenlőség ugyanígy elképzelhető. A rendezettség irány nem lényegi kérdés.

5  2014. 07. 13.Adatszerkezetek5/55 11 A kupac algebrai specifikációja 1.1 Kupac-műveletek 1 Típus Kupac(N,Elem): Asszociált műveletek: Létrehoz(Tömb(1..N:Elem)): Kupac [ egy Elem-sorozatból készít kupacot ] Üres: Kupac KupacHossz(Kupac): Egész [ az Elem-sorozat kezdő kupac-tulajdonságú részének a hossza ] Méret(Kupac  Tömb): Egész [ a teljes Elem-sorozat hossza ] Kupac?(Kupac  Tömb,Egész): Logikai [ rendelkezik-e a kupac-tulajdonsággal az Elem-sorozat egy adott indexű elemétől kezdődően a kupachosszig ] A csak leíró szerepű műveleteket dőlten szedtem I.

6  2014. 07. 13.Adatszerkezetek6/55 1.1 Kupac-műveletek (folytatás) Kupacba(Kupac,Elem): Kupac  {NemDef} [az Elem-et a kupacba betesz, a kupac-tulajdonság megmarad] Kupacból(Kupac): (Kupac  Elem)  {NemDef} [a kupacból a gyökeret kiveszi, a kupac-tulajdonság megmarad] KupacRövidítés(Kupac): Kupac [a kupac első (gyökér) és utolsó elemének cseréje, majd a kupac- tulajdonság helyreállítása] Érték(Kupac  Tömb,Egész): Elem  {NemDef} [az Elem-sorozat adottadik elemének értéke] BalGyerek(Kupac,Egész): Egész  {NemDef} [a kupac adottadik elemének bal gyerekének indexe] JobbGyerek(Kupac,Egész): Egész  {NemDef} [a kupac adottadik elemének jobb gyerekének indexe] MinGyerek(Kupac,Egész): Egész  {NemDef} [a kupac adottadik elemének kisebbik gyerekének indexe] VanGyerek?(Kupac,Egész): Logikai  {NemDef} [a kupac adottadik elemének van-e gyereke] UtolsóSzülő(Kupac): Egész  {NemDef} [a kupac utolsó gyerekkel bíró elmének indexe] A csak leíró szerepű műveleteket dőlten szedtem I.

7  2014. 07. 13.Adatszerkezetek7/55 1.21.2 Kupac-axiómák 1.2 Axiómák:Jelölések: k,k’:Kupac(Elem) = Kupac-típusú objektumk,k’:Kupac(Elem) = Kupac-típusú objektum t:Tömb(1..N:Elem) = tömb típusú objektumt:Tömb(1..N:Elem) = tömb típusú objektum i,j:Egész = tömb-indexeki,j:Egész = tömb-indexek 1 o Létrehoz – axióma k=Létrehoz(t)   i  [1..N]:  j  [1..N]: t(i)=Érték(k,j)  KupacHossz(k)=N  Méret(k)=N  Kupac?(k,1) 2 o Üres – axióma k=Üres  KupacHossz(k)=0  Méret(k)=N I.

8  2014. 07. 13.Adatszerkezetek8/55 1.21.2 Kupac-axiómák (folytatás) 1.2 3 o Kupac-tulajdonság – axióma Kupac?(k,i)  i>KupacHossz(k)  i  UtolsóSzülő(k) [  KupacHossz(k)]  Érték(k,i)  Érték(MinGyerek(k,i))  Kupac?(k,BalGyerek(k,i))  Kupac?(k,JobbGyerek(k,i)) 1.állítás: Az üres kupac kupac-tulajdonságú  j  1: Kupac?(Üres,j) Biz.: 2 o - és 3 o -ból következik 2.állítás: A kupac-tulajdonság öröklése Kupac?(k,i)   j>i: Kupac?(k,j) Biz.: 3 o -ból következik I.

9  2014. 07. 13.Adatszerkezetek9/55 1.21.2 Kupac-axiómák (folytatás) 1.2 4 o Méret – axióma  o  Művelet Kupac : k’=o(k)  Méret(k’)=Méret(k)=N 5 o Kupacba – axióma KupacHossz(k)<N  k’=Kupacba(k,e)  KupacHossz(k’)=KupacHossz(k)+1   i  [1..KupacHossz(k)]: Érték(k,i)  k’  e  k’  Kupac?(k’,1)  KupacHossz(k)=N  Kupacba(k,e)=NemDef I.

10  2014. 07. 13.Adatszerkezetek10/55 1.21.2 Kupac-axiómák (folytatás) 1.2 6 o Kupacból – axióma KupacHossz(k)>0  (k’,e)=Kupacból(k)  e=Érték(k,1)  KupacHossz(k’)=KupacHossz(k)–1   i  [2..KupacHossz(k)]: Érték(k,i)  k’  Kupac?(k’,1)  KupacHossz(k)=0  Kupacból(k)=NemDef 7 o KupacRövidítés – axióma k’=KupacRövidítés(k)  Érték(k’,KupacHossz(k))=Érték(k,1)  KupacHossz(k’)=KupacHossz(k)–1   i  [2..KupacHossz(k)]: Érték(k,i)  k’  Kupac?(k’,1) I.

11  2014. 07. 13.Adatszerkezetek11/55 1.21.2 Kupac-axiómák (folytatás) 1.2 8 o Gyerek – axióma i  [1..UtolsóSzülő(k)]  VanGyerek?(k,i)  JobbGyerek(k,i)  KupacHossz(k)  Érték(BalGyerek(k,i))  Érték(JobbGyerek(k,i))  MinGyerek(k,i)=BalGyerek(k,i)  Érték(BalGyerek(k,i))>Érték(JobbGyerek(k,i))  MinGyerek(k,i)=JobbGyerek(k,i)  JobbGyerek(k,i)>KupacHossz(k)  MinGyerek(k,i)=BalGyerek(k,i)  i  (UtolsóSzülő(k)..KupacHossz(k)]   VanGyerek?(k,i)  … I.

12  2014. 07. 13.Adatszerkezetek12/55 2 A kupac típuskonstrukció specifikációja 2.1 A kupac exportmodulja ExportModul Kupac(Konstans N:Egész, Típus TElem): Típus TTömb=Tömb(1..N:TElem) Típus TTömb=Tömb(1..N:TElem) Eljárás Létrehoz(Konstans t:TTömb, Változó k:Kupac) Eljárás Létrehoz(Konstans t:TTömb, Változó k:Kupac) Eljárás Üres(Változó k:Kupac) Eljárás Üres(Változó k:Kupac) Függvény KupacHossz(Konstans k:Kupac):Egész Függvény KupacHossz(Konstans k:Kupac):Egész Függvény Méret(Konstans k:Kupac):Egész Függvény Méret(Konstans k:Kupac):Egész Függvény Kupac?(Konstans k:Kupac, i:Egész):Logikai Függvény Kupac?(Konstans k:Kupac, i:Egész):Logikai Függvény Kupacba(Változó k:Kupac, Konstans e:TElem) Függvény Kupacba(Változó k:Kupac, Konstans e:TElem) Függvény Kupacból(Változó k:Kupac, e:TElem) Függvény Kupacból(Változó k:Kupac, e:TElem) Meg kell gondolni az operátorok ef/uf-ét az axiómák alapján! I.

13  2014. 07. 13.Adatszerkezetek13/55 2.1 A kupac exportmodulja (folytatás) Eljárás KupacRövidítés(Változó k:Kupac) Eljárás KupacRövidítés(Változó k:Kupac) Függvény Érték(Változó k:Kupac, Konstans i:Egész):TElem Függvény Érték(Változó k:Kupac, Konstans i:Egész):TElem Függvény BalGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény BalGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény JobbGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény JobbGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény MinGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény MinGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény VanGyerek?(Változó k:Kupac, Konstans i:Egész):Logikai Függvény VanGyerek?(Változó k:Kupac, Konstans i:Egész):Logikai I.

14  2014. 07. 13.Adatszerkezetek14/55 2.1 A kupac exportmodulja (folytatás) Függvény UtolsóSzülő(Konstans k:Kupac):Egész Függvény UtolsóSzülő(Konstans k:Kupac):Egész Függvény Hibás?(Változó k:Kupac):Logikai Függvény Hibás?(Változó k:Kupac):LogikaiVáltozó Modul vége. I.

15  2014. 07. 13.Adatszerkezetek15/55 22 A kupac típuskonstrukció specifikációja 2.2. A kupac megvalósítási modulja 2 Egyetlen „értelmes” ábrázolás van: a folytonos, a tömbre építkező. Modul Kupac(Konstans N:Egész, Típus TElem): Reprezentáció [Típus TTömb=Tömb(1..N:TElem)] Változó elemek:TTömb hossz,maxHossz:0..N hiba:Logikai I.

16  2014. 07. 13.Adatszerkezetek16/55 2.2 A kupac megvalósítási modulja (folytatás) Implementáció Eljárás Létrehoz(Konstans t:TTömb, Változó k:Kupac): Változó j:Egész elemek:=t; hossz:=N; maxHossz:=N; hiba:=Hamis Ciklus j=UtolsóSzülő(k)-től 1-ig -1-esével GyökérHelyre(k,j) Ciklus vége elemek:=t; hossz:=N; maxHossz:=N; hiba:=Hamis Ciklus j=UtolsóSzülő(k)-től 1-ig -1-esével GyökérHelyre(k,j) Ciklus vége Eljárás vége. Eljárás Üres(Változó k:Kupac): hossz:=0 maxHossz:=N hiba:=Hamis Eljárás vége. Eljárás GyökérHelyre(Változó k:Kupac, gyökér:Egész): Változó szülő, gyerek:Egész szülő:=gyökér; gyerek:=MinGyerek(k,szülő) Ciklus amíg VanGyerek?(k,szülő) és Érték(k,szülő)>Érték(k,gyerek) Csere(k,szülő,gyerek); szülő:=gyerek gyerek:=MinGyerek(k,gyerek) Ciklus vége Eljárás vége. szülő:=gyökér; gyerek:=MinGyerek(k,szülő) Ciklus amíg VanGyerek?(k,szülő) és Érték(k,szülő)>Érték(k,gyerek) Csere(k,szülő,gyerek); szülő:=gyerek gyerek:=MinGyerek(k,gyerek) Ciklus vége Eljárás vége. Lokális eljárás L. A példát! példá L. A példát! példá I.

17  2014. 07. 13.Adatszerkezetek17/55 2.2 A kupac megvalósítási modulja (folytatás) Kiinduló állapot „fás” képe:Kiinduló állapot „fás” képe: 53724681123456785372468112345678 A kupacosítandó sorozat 5 3 7 2 4 6 8 1 5 3 7 2 4 6 8 1 A kupacosítás (Létrehozás lépései):A kupacosítás (Létrehozás lépései): 5 3 7 1 4 6 8 2 5 3 6 1 4 7 8 2 5 1 6 3 4 7 8 2 I.

18  2014. 07. 13.Adatszerkezetek18/55 2.2 A kupac megvalósítási modulja (folytatás) 1 2 6 5 4 7 8 3 1 2 6 3 4 7 8 5 Íme a kupac! 5 1 6 2 4 7 8 3 1 5 6 2 4 7 8 3 I.

19  2014. 07. 13.Adatszerkezetek19/55 2.2 A kupac megvalósítási modulja (folytatás) Függvény Kupac?(Konstans k:Kupac, i:Egész):Logikai … hf … … hf … Függvény vége. Függvény KupacHossz(Konstans k:Kupac):Egész KupacHossz:=hossz KupacHossz:=hossz Függvény vége. Függvény Méret(Konstans k:Kupac):Egész Méret:=maxHossz Méret:=maxHossz Függvény vége. Függvény Érték(Változó k:Kupac, Konstans i:Egész):TElem [Ef: i  [1..maxHossz]] Érték:=elemek(i) Érték:=elemek(i) Függvény vége. I.

20  2014. 07. 13.Adatszerkezetek20/55 2.2 A kupac megvalósítási modulja (folytatás) Eljárás Kupacba(Változó k:Kupac, Konstans e:TElem): [Ef: hossz<maxHossz] Változó j:Egész [új elem a végére:] hossz:+1; elemek(hossz):=e [a kupac-tulajdonság helyreállítása:] Ciklus j=UtolsóSzülő(k)-től 1-ig -1-esével GyökérHelyre(k,j) Ciklus vége Eljárás vége. Eljárás Kupacból(Változó k:Kupac, e:TElem): [Ef: hossz>0] e:=elemek(1); KupacRövidítés(k) e:=elemek(1); KupacRövidítés(k)KupacRövidítés Eljárás vége. L. A Létrehozás-nál! Létrehozás L. A Létrehozás-nál! Létrehozás L. A példát! példá L. A példát! példá I.

21  2014. 07. 13.Adatszerkezetek21/55 2.2 A kupac megvalósítási modulja (folytatás) Elemkivétel: Kupacból(  [1,2,6,3,4,7,8,5] ,  e)Elemkivétel: Kupacból(  [1,2,6,3,4,7,8,5] ,  e) 8 1 2 6 3 4 7 5 5 2 6 3 4 7 8 „Utolsó előre fuss!” 2 5 6 3 4 7 8 2 3 6 5 4 7 8 Előrehozás + kupacosítás:Előrehozás + kupacosítás: Elemkiolvasás I.

22  2014. 07. 13.Adatszerkezetek22/55 2.2 A kupac megvalósítási modulja (folytatás) Függvény BalGyerek(Változó k:Kupac, Konstans i:Egész):Egész [Ef: i  [1..hossz Div 2]] BalGyerek:=i*2 BalGyerek:=i*2 Függvény vége. Függvény JobbGyerek(Változó k:Kupac, Konstans i:Egész):Egész [Ef: i  [1..hossz Div 2]] JobbGyerek:=i*2+1 JobbGyerek:=i*2+1 Függvény vége. L. Az UtolsóSzülő-nél! UtolsóSzülő L. Az UtolsóSzülő-nél! UtolsóSzülő I.

23  2014. 07. 13.Adatszerkezetek23/55 2.2 A kupac megvalósítási modulja (folytatás) Függvény MinGyerek(Változó k:Kupac, Konstans i:Egész):Egész [Ef: i  [1..hossz Div 2]] Elágazás JobbGyerek(k,i)>hossz esetén MinGyerek:=BalGyerek(k,i) Érték(BalGyerek(k,i)) hossz esetén MinGyerek:=BalGyerek(k,i) Érték(BalGyerek(k,i))<Érték(JobbGyerek(k,i)) esetén MinGyerek:=BalGyerek(k,i) egyéb esetben MinGyerek:=JobbGyerek(k,i) Elágazás vége Függvény vége. I.

24  2014. 07. 13.Adatszerkezetek24/55 2.2 A kupac megvalósítási modulja (folytatás) Függvény VanGyerek?(Változó k:Kupac, Konstans i:Egész):Logikai [Ef: i  [1..hossz]] VanGyerek?:=i*2[=BalGyerek]  hossz Függvény vége. Függvény UtolsóSzülő(Konstans k:Kupac):Egész [Ef: i  [1..hossz]] UtolsóSzülő:=hossz Div 2 Függvény vége. Függvény Hibás?(Változó k:Kupac):Logikai … hf … Változó Függvény vége. I.

25  2014. 07. 13.Adatszerkezetek25/55 2.2 A kupac megvalósítási modulja (folytatás) Eljárás KupacRövidítés(Változó k:Kupac): Csere(k,hossz,1); hossz:-1; GyökérHelyre(k,1) GyökérHelyre Eljárás vége. Inicializálás Inicializálás Hossz:=0; maxHossz:=N; hiba:=Hamis Modul vége. Eljárás Csere(Változó k:Kupac, i,j:Egész): Változó cs:TElem cs:=elemek(i); elemek(i):=elemek(j); elemek(j):=cs cs:=elemek(i); elemek(i):=elemek(j); elemek(j):=cs Eljárás vége. Lokális eljárás I.

26  2014. 07. 13.Adatszerkezetek26/55 Tartalomjegyzék 1 A prioritási sor algebrai specifikációja algebrai specifikációjaalgebrai specifikációja 1.1 Prioritási sor-műveletek műveletek 1.2 Prioritási sor-axiómák axiómák 2 A prioritási sor típuskonstrukció specifikációja típuskonstrukció specifikációjatípuskonstrukció specifikációja 2.1 A prioritási sor exportmodulja exportmodulja 2.2 A prioritási sor megvalósítási moduljai megvalósítási moduljaimegvalósítási moduljai 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás Prioritás-szerint rendezett (folytonos ) ábrázolásPrioritás-szerint rendezett (folytonos ) ábrázolás 2.2.2 Időrendben rendezett (folytonos ) ábrázolás Időrendben rendezett (folytonos ) ábrázolásIdőrendben rendezett (folytonos ) ábrázolás 2.2.3 Kupacos ábrázolás Kupacos ábrázolásKupacos ábrázolás 3 Alkalmazási példák példák II.

27  2014. 07. 13.Adatszerkezetek27/55 11 A prioritási sor algebrai specifikációja 1.1 Prioritási sor-műveletek 1 Típus PrSor(Elem,Prioritás): Asszociált műveletek: Üres: PrSor Üres?(PrSor): Logikai Tele?(PrSor): Logikai Első(PrSor): (Elem  Prioritás)  {NemDef} Sorba(PrSor,Elem,Prioritás): PrSor  {NemDef} Sorból(PrSor): (PrSor  Elem  Prioritás)  {NemDef} SorHossz(PrSor): Egész II.

28  2014. 07. 13.Adatszerkezetek28/55 1.21.2 Prioritási sor-axiómák 1.2 Axiómák: 1 o Az Üres prioritási sor üres. s=Üres  Üres?(s)  SorHossz(s)=0 2 o Az a prioritási sor, amelyben legalább egy elem van, az nem üres; a sorba tétel során a sor hossza eggyel nő.  Tele?(s)   Üres?(Sorba(s,e,p))  SorHossz(Sorba(s,e,p))=SorHossz(s)+1 3a o Az üres prioritási sornak nincs első eleme. Első?(Üres)=NemDef 3b o Az Üres prioritási sorból nem lehet kivenni elemet. Sorból(Üres)=NemDef 3c o A tele prioritási sorba nem lehet további elemet betenni. Tele?(s)  Sorba(s,e,p)=NemDef II.

29  2014. 07. 13.Adatszerkezetek29/55 1.2 Prioritási sor-axiómák (folytatás) 4 o A prioritási sor első eleme a legnagyobb prioritásúak közül a legrégebben betett elem. Üres?(s)   Tele?(s)  Első(Sorba(s,e,p))=(e,p)  Üres?(s)   Tele?(s)  s’=Sorba(s,e,p)  ( Első(s).Pr  p  Első(s’)=Első(s) )  ( Első(s).Pr<p  Első(Sorba(s,e,p))=(e,p) )  SorHossz(s’)=SorHossz(s)+1.Pr II.

30  2014. 07. 13.Adatszerkezetek30/55 1.2 Prioritási sor-axiómák (folytatás) 5 o A prioritási sorból az első elemet lehet kivenni (a többi nem változik). Üres?(s)   Tele?(s)  Sorból(Sorba(s,e,p))=(s,e,p)  Üres?(s)   Tele?(s)  Sorból(s)=(s’,e’,p’)  (e’,p’)=Első(s)  ( Első(s).Pr<p  s=Sorból(Sorba(s,e,p)).Sor )  ( Első(s).Pr  p  Sorba(s’,e,p)=Sorból(Sorba(s,e,p)).Sor ).Sor Állítás: a Sorból művelet után eggyel csökkent a prioritási sor hossza.  Üres?(s)  SorHossz(Sorból(s).Sor)=SorHossz(s)–1 Biz.: 2 o & 5 o –ből következik. II.

31  2014. 07. 13.Adatszerkezetek31/55 2 A prioritási sor típuskonstrukció specifikációja 2.1 A prioritási sor exportmodulja ExportModul PrSor(Típus TElem: Típus TPrior): Eljárás Üres(Változó s:PrSor) Eljárás Üres(Változó s:PrSor) Függvény Üres?(Konstans s:PrSor): Logikai Függvény Üres?(Konstans s:PrSor): Logikai Függvény Tele?(Konstans s:PrSor): Logikai Függvény Tele?(Konstans s:PrSor): Logikai Függvény ElsőElem(Változó s:PrSor): TElem Függvény ElsőElem(Változó s:PrSor): TElemVáltozó Függvény ElsőPrioritás(Változó s:PrSor): TPrior Függvény ElsőPrioritás(Változó s:PrSor): TPrior Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior) Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior) Függvény SorHossz(Konstans s:PrSor): Egész Függvény SorHossz(Konstans s:PrSor): Egész Meg kell gondolni az operátorok ef/uf-ét az axiómák alapján! II.

32  2014. 07. 13.Adatszerkezetek32/55 2.1 A prioritási sor exportmodulja (folytatás) Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior) Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior) Infix Operátor Azonos?(Konstans s1,s2:PrSor):Logikai Infix Operátor Azonos?(Konstans s1,s2:PrSor):Logikai Másnéven s1=s2 Másnéven s1=s2 Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2 Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2 Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s Operátor Beolvasás(Változó s:PrSor) Másnéven Be: s Operátor Beolvasás(Változó s:PrSor) Másnéven Be: s Függvény Hibás?(Változó s:PrSor): Logikai Függvény Hibás?(Változó s:PrSor): LogikaiVáltozó Modul vége. II.

33  2014. 07. 13.Adatszerkezetek33/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor megvalósítási moduljai 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás moduljai 2moduljai Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció Konstans MaxHossz: Egész(???) Típus TPrElem=Rekord(elem: TElem, pr: TPrior) PrElemek=Tömb(1..MaxHossz: TPrElem) [TípusInvariáns: növekvően…] Változó se: PrElemek eleje, vége, hossz : 0..MaxHossz hiba: Logikai II.

34  2014. 07. 13.Adatszerkezetek34/55 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Implementáció Eljárás Üres(Változó s:PrSor): eleje:=1; vége:=1; hossz:=0; hiba:=Hamis Eljárás vége. Függvény Üres?(Konstans s:PrSor): Logikai Üres?:=hossz=0 Függvény vége. Függvény Tele?(Konstans s:PrSor): Logikai Tele?:= hossz=MaxHossz Tele?:= hossz=MaxHossz Függvény vége. Függvény ElsőElem(Változó s:PrSor): TElem Ha hossz  0 akkor ElsőElem:=se(eleje).elem különben hiba:=Igaz Ha hossz  0 akkor ElsőElem:=se(eleje).elem különben hiba:=Igaz Függvény vége. II.

35  2014. 07. 13.Adatszerkezetek35/55 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Függvény ElsőPrioritás(Változó s:PrSor): TPrior Ha hossz  0 akkor ElsőPrioritás:=se(eleje).pr különben hiba:=Igaz Függvény vége. Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): Ha hossz<MaxHossz akkor Ha hossz=0 akkor hely:=eleje különben Helykeresés(eleje,vége,hely,p) Eltolás(hely,vége) Elágazás vége se(hely).elem:=e; se(hely).pr:=p vége:  1; hossz:+1...  II.

36  2014. 07. 13.Adatszerkezetek36/55 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás)... különben hiba:=Igaz Elágazás vége Eljárás vége.... különben hiba:=Igaz Elágazás vége Eljárás vége. Eljárás Helykeresés(Konstans eleje,vége:0..MaxHossz, Változó hely: 0..MaxHossz, Konstans p:TPrior): hely:=eleje Ciklus amíg hely  vége  1 és se(hely).pr  p hely:  1 Ciklus vége [hely  vége  1 és se(hely).pr<p vagy hely=vége  1  TípusInvariáns] Eljárás vége. hely:=eleje Ciklus amíg hely  vége  1 és se(hely).pr  p hely:  1 Ciklus vége [hely  vége  1 és se(hely).pr<p vagy hely=vége  1  TípusInvariáns] Eljárás vége.TípusInvariáns II.

37  2014. 07. 13.Adatszerkezetek37/55 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Eljárás Eltolás(Konstans hely,vége:0..MaxHossz): Változó i:Egész i:=vége Ciklus amíg i  hely  1 se(i  1):=se(i); i:  1 Ciklus vége Eljárás vége. i:=vége Ciklus amíg i  hely  1 se(i  1):=se(i); i:  1 Ciklus vége Eljárás vége. Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior): Ha hossz>0 akkor p:=se(eleje).pr; e:=se(eleje).elem eleje:  1; hossz:-1 különben hiba:=Igaz Elágazás vége Eljárás vége. II.

38  2014. 07. 13.Adatszerkezetek38/55 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Függvény SorHossz(Konstans s:Sor): Egész SorHossz:=hossz Függvény vége. Függvény Hibás?(Változó s:PrSor): Logikai Hibás?:=hiba; hiba:=Hamis Függvény vége. Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai Másnéven s1=s2 ??? Operátor vége. Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2 Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai Másnéven s1=s2 ??? Operátor vége. Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2??? ??? Operátor vége. ??? Operátor vége.??? II.

39  2014. 07. 13.Adatszerkezetek39/55 2.2.1 Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s … Operátor vége. Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s … Operátor vége. Operátor Beolvasás(Változó s:PrSor) Másnéven Be: s … Operátor vége. Inicializálás Inicializálás eleje:=1; vége:=1; hossz:=0; hiba:=Hamis Modul vége. II.

40  2014. 07. 13.Adatszerkezetek40/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor meglósítási moduljai 2.2.2 Időrendben rendezett (folytonos ) ábrázolás 2 Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció … ugyanaz, mint 2.2.1-ben... 2.2.1 II.

41  2014. 07. 13.Adatszerkezetek41/55 2.2.2 Időrendben rendezett (folytonos ) ábrázolás (folytatás) Eljárás Üres(Változó s:PrSor):...ugyanaz, mint 2.2.1-ben Eljárás vége. 2.2.1 Függvény Üres?(Konstans s:PrSor): Logikai...ugyanaz, mint 2.2.1-ben Függvény vége. 2.2.1 Függvény Tele?(Konstans s:PrSor): Logikai...ugyanaz, mint 2.2.1-ben Függvény vége. 2.2.1 Függvény ElsőElem(Változó s:PrSor): TElem Ha hossz  0 akkor ElsőElem:=se(Max(s)).eleje különben hiba:=Igaz Függvény vége. II.

42  2014. 07. 13.Adatszerkezetek42/55 2.2.2 Időrendben rendezett (folytonos ) ábrázolás (folytatás) Függvény Max(Változó s:PrSor): 1..MaxHossz i:=eleje; m:=i Ciklus j=1-től hossz-1-ig i:  1; Ha se(i).pr>se(m).pr akkor m:=i Ciklus vége Max:=m Függvény vége. Függvény ElsőPrioritás(Változó s:PrSor): TPrior Ha hossz  0 akkor ElsőPrioritás:=se(Max(s)).pr különben hiba:=Igaz Függvény vége. Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): Ha hossz<MaxHossz akkor se(vége).pr:=p; se(vége):=e; hossz:+1; vége:  1  II.

43  2014. 07. 13.Adatszerkezetek43/55 2.2.2 Időrendben rendezett (folytonos ) ábrázolás (folytatás) különben hiba:=Igaz Elágazás vége Eljárás vége. különben hiba:=Igaz Elágazás vége Eljárás vége. Eljárás Sorból(Változó s:PrSor, e:TElem, p:Priotitás): Változó maxI:Egész Ha hossz>0 akkor maxI:=Max(s); e:=se(maxI).elem; p:=se(maxI).pr; Rátolás(maxI,vége); hossz:-1; vége:  1 különben hiba:=Igaz Elágazás vége Eljárás vége. Függvény Hibás?(Változó s:PrSor): Logikai...ugyanaz, mint 2.2.1-ben Függvény vége. 2.2.1 2.2.1 Hf. II.

44  2014. 07. 13.Adatszerkezetek44/55 2.2.2 Időrendben rendezett (folytonos ) ábrázolás (folytatás) Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai … ugyanaz, mint 2.2.1-ben... Operátor vége. Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai … ugyanaz, mint 2.2.1-ben... Operátor vége. Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) … ugyanaz, mint 2.2.1-ben... Operátor vége. Operátor Kiírás(Konstans s:PrSor) … ugyanaz, mint 2.2.1-ben... Operátor vége. Operátor Kiírás(Konstans s:PrSor) … ugyanaz, mint 2.2.1-ben... Operátor vége. Operátos Beolvasás(Változó s:PrSor) … ugyanaz, mint 2.2.1-ben... Operátor vége. Inicializálás … ugyanaz, mint 2.2.1-ben... … ugyanaz, mint 2.2.1-ben...2.2.1 Modul vége. II.

45  2014. 07. 13.Adatszerkezetek45/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor meglósítási moduljai 2.2.3 Kupacos ábrázolás 2 Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció Konstans MaxHossz: Egész(???) Típus TPrElem=Rekord(elem: TElem, pr: TPrior) TPrElemek=Kupac(MaxHossz, TPrElem) Változó ke: TPrElemek Változó ke: TPrElemek II.

46  2014. 07. 13.Adatszerkezetek46/55 2.2.3 Kupacos ábrázolás (folytatás) Implementáció Eljárás Üres(Változó s:PrSor): Üres(ke) Eljárás vége. Függvény Üres?(Konstans s:PrSor): Logikai Üres?:=KupacHossz(ke)=0 Függvény vége. Függvény Tele?(Konstans s:PrSor): Logikai Tele?:=KupacHossz(ke)=MaxHossz Tele?:=KupacHossz(ke)=MaxHossz Függvény vége. II.

47  2014. 07. 13.Adatszerkezetek47/55 2.2.3 Kupacos ábrázolás (folytatás) Függvény ElsőElem(Változó s:PrSor): TElem Ha KupacHossz(ke)  0 akkor ElsőElem:=Érték(ke,1).elem különben hiba:=Igaz Elágazás vége Ha KupacHossz(ke)  0 akkor ElsőElem:=Érték(ke,1).elem különben hiba:=Igaz Elágazás vége Függvény vége. Függvény ElsőPrioritás(Változó s:PrSor): TPrior Ha KupacHossz(ke)  0 akkor ElsőPrioritás:=Érték(ke,1).pr különben hiba:=Igaz Elágazás vége Függvény vége. II.

48  2014. 07. 13.Adatszerkezetek48/55 2.2.3 Kupacos ábrázolás (folytatás) Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): Ha KupacHossz(ke)<MaxHossz akkor Kupacba(ke,TPrElem(e,p)) különben hiba:=Igaz Elágazás vége Eljárás vége. Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior): Változó ep:TPrElem Ha KupacHossz(ke)>0 akkor Kupacbol(ke,ep) e:=ep.elem; p:=ep.pr különben hiba:=Igaz Eljárás vége. II.

49  2014. 07. 13.Adatszerkezetek49/55 2.2.3 Kupacos ábrázolás (folytatás) Függvény SorHossz(Konstans s:Sor): Egész SorHossz:=KupacHossz(ke) Függvény vége. Függvény Hibás?(Változó s:PrSor): Logikai Hibás?:=Hibás?(ke) Függvény vége. … hf … … hf … Inicializálás Inicializálás Üres(ke) Üres(ke) Modul vége. II.

50  2014. 07. 13.Adatszerkezetek50/55 33 Alkalmazási példák 3 3.1 Megszakítási rendszerMegszakítási rendszer 3.2 Mindennapok prioritási soraiMindennapok II.

51  2014. 07. 13.Adatszerkezetek51/55 3.13.1 Megszakítási rendszer 3.1 A számítógép az esetleg konkuráló (egyidejűleg érkező) megszakításokat egy prioritási sorba gyűjti, majd ennek sorrendjében hajtja végre az egyes megszakításokhoz rendelt rutinokat... II.

52  2014. 07. 13.Adatszerkezetek52/55 3.23.2 Mindennapok prioritási sorai 3.2 Az Élet „dezertörei” mindenki által kellően átélt példákkal illusztrálják a prioritási sorok „létjogosultságát”, de legalábbis létezését. II.

53  2014. 07. 13.Adatszerkezetek53/55 Megjegyzés -- Változó A „Változó”-ság oka: valamilyen hiba lehetősége fönnáll (üres vagy tele a sor), s ennek visszajelzésére a „hiba” mező változhat.valamilyen hiba lehetősége fönnáll (üres vagy tele a sor), s ennek visszajelzésére a „hiba” mező változhat. Vagy valamely operáció (l. Hiba függvény) kifejezetten állítja.Vagy valamely operáció (l. Hiba függvény) kifejezetten állítja.

54  2014. 07. 13.Adatszerkezetek54/55 Megjegyzés -- Tele? Ez a furcsaság azt fejezi ki, hogy a memória akkor is elfogyhat, amikor az adott sor első elemét igyekeznénk beletenni. Ez a furcsaság azt fejezi ki, hogy a memória akkor is elfogyhat, amikor az adott sor első elemét igyekeznénk beletenni.

55  2014. 07. 13.Adatszerkezetek55/55 Megjegyzés -- ciklikus növelés A rövidség kedvéért bevezetjük ciklikus növelés, illetve csökkentés műveleteket.  1:{1..MaxHossz}  {1..MaxHossz} x  1 := (x Mod MaxHossz)+1,  1:{1..MaxHossz}  {1..MaxHossz} x  1 := (x  1+MaxHossz) Mod MaxHossz

56  2014. 07. 13.Adatszerkezetek56/55 Megjegyzés -- Azonosság? „s1=s2” értelmezési lehetőségek: –„tökéletesen” azonos állapot, azaz s1.eleje=s2.eleje és s1.vége=s2.vége (értékmegosztás esetén  azonos elemek) –„lényegi” azonosság, azaz azonos számú és értékű elemek.

57  2014. 07. 13.Adatszerkezetek57/55 Megjegyzés -- Értékadás „s1:=s2” értelmezési lehetőségek: –„tökéletesen” azonos állapot létrehozása, azaz s1.eleje:=s2.eleje; s1.vége:=s2.vége (értékmegosztás esetén  azonos elemek) –értékmásolás, azaz s1 minden elemének s2-másolatelem létrehozása.

58  2014. 07. 13.Adatszerkezetek58/55 Megjegyzés -- Prioritás Az elemek rendezésére szolgáló többletinfor- máció. Infix Operátor  (TPrior,TPrior): Logikai Megvalósítása: az elem egy „rendezett” mezője,az elem egy „rendezett” mezője, az elemen értelmezett valamilyen alkalmas rendezett értéket szolgáltató függvény.az elemen értelmezett valamilyen alkalmas rendezett értéket szolgáltató függvény. II.II.


Letölteni ppt "Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék"

Hasonló előadás


Google Hirdetések