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

2  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  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  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  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  Adatszerkezetek6/ 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  Adatszerkezetek7/ 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  Adatszerkezetek8/ Kupac-axiómák (folytatás) 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  Adatszerkezetek9/ Kupac-axiómák (folytatás) 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)

10  Adatszerkezetek10/ Kupac-axiómák (folytatás) 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  Adatszerkezetek11/ Kupac-axiómák (folytatás) 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  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  Adatszerkezetek13/ 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  Adatszerkezetek14/ 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  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  Adatszerkezetek16/ 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  Adatszerkezetek17/ A kupac megvalósítási modulja (folytatás) Kiinduló állapot „fás” képe:Kiinduló állapot „fás” képe: A kupacosítandó sorozat A kupacosítás (Létrehozás lépései):A kupacosítás (Létrehozás lépései): I.

18  Adatszerkezetek18/ A kupac megvalósítási modulja (folytatás) Íme a kupac! I.

19  Adatszerkezetek19/ 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  Adatszerkezetek20/ A kupac megvalósítási modulja (folytatás) Eljárás Kupacba(Változó k:Kupac, Konstans e:TElem): [Ef: hossz0] 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  Adatszerkezetek21/ 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) „Utolsó előre fuss!” Előrehozás + kupacosítás:Előrehozás + kupacosítás: Elemkiolvasás I.

22  Adatszerkezetek22/ 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  Adatszerkezetek23/ 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  Adatszerkezetek24/ 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  Adatszerkezetek25/ 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  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 Prioritás-szerint rendezett (folytonos ) ábrázolás Prioritás-szerint rendezett (folytonos ) ábrázolásPrioritás-szerint rendezett (folytonos ) ábrázolás Időrendben rendezett (folytonos ) ábrázolás Időrendben rendezett (folytonos ) ábrázolásIdőrendben rendezett (folytonos ) ábrázolás Kupacos ábrázolás Kupacos ábrázolásKupacos ábrázolás 3 Alkalmazási példák példák II.

27  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  Adatszerkezetek28/ 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  Adatszerkezetek29/ 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


30  Adatszerkezetek30/ 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


31  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  Adatszerkezetek32/ 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  Adatszerkezetek33/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor megvalósítási moduljai 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  Adatszerkezetek34/ 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  Adatszerkezetek35/ 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

36  Adatszerkezetek36/ 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


37  Adatszerkezetek37/ 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  Adatszerkezetek38/ 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  Adatszerkezetek39/ 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  Adatszerkezetek40/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor meglósítási moduljai Időrendben rendezett (folytonos ) ábrázolás 2 Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció … ugyanaz, mint ben II.

41  Adatszerkezetek41/ Időrendben rendezett (folytonos ) ábrázolás (folytatás) Eljárás Üres(Változó s:PrSor):...ugyanaz, mint ben Eljárás vége Függvény Üres?(Konstans s:PrSor): Logikai...ugyanaz, mint ben Függvény vége Függvény Tele?(Konstans s:PrSor): Logikai...ugyanaz, mint ben Függvény vége 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  Adatszerkezetek42/ 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

43  Adatszerkezetek43/ 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 ben Függvény vége. 2.2.1 2.2.1 Hf. II.

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

45  Adatszerkezetek45/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor meglósítási moduljai 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  Adatszerkezetek46/ 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  Adatszerkezetek47/ 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  Adatszerkezetek48/ Kupacos ábrázolás (folytatás) Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): 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  Adatszerkezetek49/ 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  Adatszerkezetek50/55 33 Alkalmazási példák Megszakítási rendszerMegszakítási rendszer 3.2 Mindennapok prioritási soraiMindennapok II.

51  Adatszerkezetek51/ 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  Adatszerkezetek52/ 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  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  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  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  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  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  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