Adatszerkezetek I. 1. előadás
Adatok jellemzői ismétlés 1. Azonosító Az a jelsorozat, amellyel hivatkozhatunk a tartalmára, amely által módosíthatjuk tartalmát. 2. Hozzáférési jog Adatokat módosítani, illetve értéküket lekérdezni, használni lehet. 3. Kezdőérték A születéskor hozzárendelt érték. Változóknál deklarációban kaphat értéket, vagy eleve van típushoz rendelt kezdőérték, esetleg speciális nem definiált érték, s így akkor mód van hivatkozás ellenőrzésre is. 2013.09.11. 2
Adatok jellemzői ismétlés 4. Hatáskör A programszöveg azon tartománya, amelyben az adathoz a hozzáférés lehetséges. 5. Élettartam A futási időnek az az intervalluma, amelyben az adat azonosítója mindvégig ugyanazt az objektumot jelöli. 2013.09.11. 3
Adatok jellemzői ismétlés 6. Értéktípus Az adatoknak az a tulajdonsága, hogy értékei mely halmazból származnak (értékhalmaz) és tevékenységeknek (eljárások, függvények, operátorok) mely készlete, amely létrehozza, felépíti, lerombolja és részekre bontja, alkalmazható rá (asszociált műveletek). 2013.09.11. 4
Típusok osztályozása Összetettség (strukturáltság) szempontjából: skalár (vagy strukturálatlan) összetett (más szóval strukturált) Strukturálási módok Keresztszorzat AxB Unió A B Sokaság sok azonos típusú elem 2013.09.11. 5
Típusok osztályozása Sokaság osztályozása rákövetkezés szerint Halmaz: nincs rákövetkezési reláció Sorozat: minden elemet egy elem követ és egy előz meg (kivéve esetleg a két szélső elemet) Hierarchikus struktúra: minden elemet egy előz meg, de több is követhet Hálós struktúra: minden elemet több előzhet meg és több is követhet 2013.09.11. 6
Típusok osztályozása Sokaságtípusok megjelenése Halmaz: halmaz, multihalmaz, intervallumhalmaz, táblázat, diszjunkt halmazfelbontás Sorozat: tömb, verem, sor, prioritási sor, lista Hierarchikus struktúra: bináris fa, nem bináris fa Hálós struktúra: irányítatlan gráf, irányított gráf 2013.09.11. 7
Típusok műveletei A típusműveletek osztályozása: értékadás (azonos típusúak közötti adatmozgatás) konstrukciós műveletek (strukturált érték létrehozása) szelekciós műveletek (strukturált érték részei kiválasztása) azonosság és más relációk számosság-függvény Min és Max típusoperátor Sorszám- (vagy Rend-) függvény transzformációs (a típuson értelmezett, a típusra képező függvények) 2013.09.11. 8
Elemi típusok 1. Egész típusok (előjeles, előjel nélküli, különböző méretben) 2. Valós típusok (különböző méretben és pontossággal) 3. Logikai típus 4. Karakter típus (értékhalmaz problémák) 5. Felsorolás típus 6. (Rész)intervallum típus 7. Mutató típusok 2013.09.11. 9
Mutató típusok Tulajdonságok: A mutató típus memóriacímek, illetve azokon a címeken levő értékek kezelésére szolgál. Az ilyen típusú változók (ti. amire a mutató típus mutat) automatikusan nem születnek meg (nem kerülnek be a memóriába) és nem is szűnnek meg erről magunknak kell gondoskodni. 2013.09.11. 10
Mutató típusok Tetszőleges (többnyire összetett) típushoz, mint bázistípushoz (TB) szervesen tartozhat egy-egy ilyen típus. Egy konkrét mutató típusú objektum csak egyfajta (nevezetesen TB-típusú) elemek kezdőcímeit hordozhatja. Kezdőérték: Sehova Műveletek: Lefoglal(m), illetve Lefoglal(m,e) Felszabadít(m) tartalom(m) 2013.09.11. 11
Mutató típusok Példa: Rendezzünk ábécé-sorendbe N szöveget! Alapmegoldás: Ciklus i=1-től N 1-ig Ciklus j=i+1-től N-ig Ha S(j)<S(i) akkor Csere(S(i),S(j)) Ciklus vége Ciklus vége Eljárás vége. Probléma: Szöveg cseréje hosszú szövegek esetén sokáig tarthat. 2013.09.11. 12
Mutató típusok Példa: Rendezzünk ábécé-sorendbe N szöveget! Ötlet: Vezessünk be N mutató típusú változót és beolvasáskor a szövegeknek foglaljunk helyet! Beolvasás: Ciklus i=1-től N-ig Be: S; Lefoglal(M(i),S) Ciklus vége Eljárás vége. 2013.09.11. 13
Mutató típusok Példa: Rendezzünk ábécé-sorendbe N szöveget! Mutatós megoldás: Ciklus i=1-től N 1-ig Ciklus j=i+1-től N-ig Ha tartalom(m(j))<tartalom(m(i)) akkor Csere(M(i),M(j)) Ciklus vége Ciklus vége Eljárás vége. Itt tehát nem a hosszú szövegeket cserélgetjük, hanem a rövid mutatókat. 2013.09.11. 14
Összetett típusok 1. Rekord 2. Halmaz (+multihalmaz, intervallumhalmaz) 3. Tömb (vektor, mátrix) 4. Szekvenciális file (input, output) 5. Verem 6. Sor 7. Prioritási sor 2013.09.11. 15
Sorozattípus műveletei Üres Létrehoz Üres?/Teli? ElemSzám Beilleszt Kihagy Első/Utolsó Létrehoz, elemek nélkül. Létrehoz, struktúrától függő elemekkel. Ellenőrzi, hogy van-e eleme / bővíthető lenne-e? Hány eleme van? Struktúrától függő helyre új elemet illeszt. Struktúrától függő helyről elemet hagy el. Első / utolsó elemének értékét adja. Elejéről/Végéről Leválasztja a sorozat első / utolsó elemét, értékét is visszaadja. ElsőUtániak/UtolsóElőttiek Eldobja az első / utolsó elemet. 2013.09.11. 16
Sorozattípus műveletei Elejére/Végére Elem ElemMódosít Elsőre/Utolsóra A sorozat első eleme elé / utolsó eleme mögé illeszt egy újat. Struktúrától függően meghatározott elemének értékét adja vissza. Struktúrától függően meghatározott elemének új értéket ad. A struktúra első / utolsó elem lesz az aktuális (ha volt ilyen). Előzőre/Következőre A struktúra aktuális eleme (ha volt ilyen) legyen az eddigit megelőző / követő. 2013.09.11. 17
Sorozattípusok fajtái Típuskonstrukció Tömb Lista Sor Prioritási sor Verem InputSzekvenciálisFile OutputSzekvenciálisFile DirektFile AsszociatívFile Tevékenységhalmaz (Létrehoz, ElemSzám,) Elem, ElemMódosít Üres, Üres?, Teli?, Beilleszt, Kihagy, Elsőre, Utolsóra, Előzőre, Következőre, Elem, ElemMódosít Üres, Üres?, Teli?, ElemSzám, Első, Elejéről, Végére Üres, Üres?, Teli?, ElemSzám, Első, Elejéről, Üres, Üres?, Teli?, ElemSzám, Első, Elejére, Elejéről Létrehoz, Üres?, Elejéről Üres, Üres?, Teli?, Végére Üres, Létrehoz, Üres?, Teli?, ElemSzám, Elem, ElemMódosít Üres, Üres?, Teli?, ElemSzám, Elem, ElemMódosít 2013.09.11. 18
Modul - típusmegvalósítás Típus értékhalmaz művelethalmaz Típusmegvalósítás modul (fordítási egység) specifikáció reprezentáció implementáció 2013.09.11. 19
Modul - típusmegvalósítás Specifikáció exportmodul ExportModul TípusModulNév(InputParaméterek): Típus Tip Konstans Konst1,Konst2,... Függvény Fv1(FormParam): FvTip1 Eljárás Elj1(FormParam) Operátor Op1(FormParam): OpTip1... Modul vége. 2013.09.11. 20
Modul - típusmegvalósítás Reprezentáció és implementáció Modul TípusModulNév(InputParaméterek): Reprezentáció Típus Tip=típuskonstrukció... Implementáció Eljárás Elj1(FormParam):... Eljárás vége.... Modul vége. 2013.09.11. 21
Modul - típusmegvalósítás A modul Pascalban a modul önálló fordítási egység nincs modulparaméter nincs külön exportmodul a specifikáció és a reprezentáció nem választható szét a modul tartalmazhat inicializáló részt 2013.09.11. 22
Modul - típusmegvalósítás Unit TípusModulNév; Uses más modulok; Interface... {specifikáció és reprezentáció} Implementation... {műveletek megvalósítása} Begin... {kezdőértékek beállítása, ha szükséges} End. 2013.09.11. 23
Kumulatív összegzés Algoritmusok kumulatív összegzés Adott egy N elemű számsorozat, adjuk meg a sorozat azon [a,b] intervallumát, ahol az elemek összege maximális! Be: N: Egész, X: Tömb(1..N,Egész) Ki: a,b: Egész Ef: n>0 Uf: 1 p q N 1 a b n és p, q : b i a q X i X i p i 2013.09.11. 24
Algoritmusok kumulatív összegzés Alapmegoldás: MaxÉrt:=- Ciklus i=1-től N-ig Ciklus j=i-től N-ig s:=összeg(i,j) Ha s>maxért akkor MaxÉrt:=s; a:=i; b:=j Ciklus vége Ciklus vége Eljárás vége. összeg(i,j): S:=0 Ciklus k=i-től j-ig S:=S+X(k) Ciklus vége összeg:=s Függvény vége. 2013.09.11. 25
Algoritmusok kumulatív összegzés i Kumulatív összegzés: i 0 i N : s i s(0):=0; MaxÉrt:=- x j j 1 Ciklus i=1-től N-ig i 1 i N s i s i 1 x i, s 0 0 s(i):=s(i-1)+x(i) b Ciklus vége xi s b s a 1 Ciklus i=1-től N-ig i a Ciklus j=i-től N-ig Ha s(j)-s(i-1)>maxért akkor MaxÉrt:=s(j)-s(i-1) a:=i; b:=j Ciklus vége Ciklus vége Eljárás vége. 2013.09.11. 26
Algoritmusok kumulatív összegzés A megoldások összehasonlítása Alapmegoldás: 3 egymásba ágyazott ciklus O(N 3 ) Kumulatív összegzés: 2 egymásba ágyazott ciklus O(N 2 ) Meggondolandók ez az elv milyen struktúrákra alkalmazható? ez az elv milyen feladattípusokra alkalmazható? 2013.09.11. 27
Adatszerkezetek I. 1. előadás vége