datszerkezetek Bevezetés datszerkezet adatok rendszerének matematikai, logikai modellje elég jó ahhoz, hogy tükrözze a valós kapcsolatokat elég egyszerű a kezeléshez datszerkezet típusok Tömbök lineáris egy vagy többdimenziós Kapcsolt listák a kapcsolati információ is adat Gráf adatpárok kapcsolattal Fa hurok nélküli gráf. Verem LIFO (Last In First Out) Sor FIFO (First In First Out). Műveletek feldolgozási tevékenységek (algoritmusok) Bejárás - az elemek elérése Keresés - adott értéknek megfelelő elemek kiválasztása Beszúrás - új adat beillesztése Törlés - adatelem eltávolítása Rendezés - elemeket logikai sorrendbe Összeválogatás - különböző rendezett adathalmazokból új elemhalmaz kialakítása Bonyolultság futási idő vagy helyigény az adatok számának függvényében B(n) 1
1. Lineáris tömbök N db. azonos típusú adatelem az elemekre egymást követő számokból álló indexhalmazzal hivatkozunk az elemeket egymást követő memóriahelyek tárolják az elemekhez bejárás nélkül férünk hozzá LB LB+1 UB-1 UB Lower Bound Upper Bound Hosszúság (Length) L = UB-LB+1 Indexelt alak 1, 2 (1), (2) [1], [2] Példa DT(1)=154 ; DT(2)=52 ; DT(3)=-33 ; DT(4)=1 ; 154 52-33 1 1.1 Hozzáférés tömbelemhez - indexelés LOC(DT) 154 52-33 1 LOC(DT(4)) LOC(DT(k))=LOC(DT)+w * (k-loc(dt)) ; w az alapadat tárolási mérete 2
1.5 Rendezés Ha L n elemű lineáris tömb, akkor ez rendezett, ha L(1)< L(2)<L(3)... L(n-1)<L(n) 1.5.1 Buborék rendezés k,p számláló, s segéd k=1 k<n-1 k=k+1 p n-k L(p)>L(p+1) s=l(p) L(p)=L(p+1) L(p+1)=s p=p+1 p=1 n ( n 1 ) 2 Bonyolultság : = O( n ) 2 3
1.6 Keresés 1.6.1 Szekvenciális keresés KER-t keressük, az n elemű L elemei között, LOC a keresett pozíció L(n+1)=KER Bonyolultság : n + 1 = O( n ) K=1 L(K) KER k=k+1 1.6.2 Bináris keresés KER-t keressük, ha L sorbarendezett, Beg, End, Mid segédváltozók, LOC a keresett pozíció, INT az egészrész Beg=LB(L) End=UB(L) Mid=INT((Beg+End)/2) LOC=Mid LOC=k End=Mid-1 Beg<End és L(Mid) KER L(Mid)=KER Mid=INT(Beg+End)/2 KER<L(Mid) LOC=Null Beg=Mid+1 Bonyolultság : legalább szükséges összehasonlítások száma f(n), Minden összehasonlításkor feleződik a minta f ( n ) 2 > n f ( n ) = log2 ( n ) + 1 4
2. Többdimenziós tömbök N * M db. azonos típusú adatelem az elemekre egymást követő számokból álló indexhalmazokból alkotott számpárokkal hivatkozunk az elemeket egymást követő memóriahelyek tárolják az elemekhez bejárás nélkül férünk hozzá 1.1 Hozzáférés tömbelemhez - indexelés Kétdimenziós eset LB SOR1 LB SOR1 +1 UB SOR1-1 UB SOR1 LB SOR2 LB SOR2 +1 UB SOR2-1 UB SOR2 LB SORn-1 LB SORn-1 +1 UB SORn-1-1UB SORn-1 LB SORn LB SORn +1 UB SORn -1 UB SORn Indexelt alak 1,1, 12 (1,1), (1,2) [1 ] [1], [1 ] [2] Memória pozíció ( m * n-es mátrix) LOC((j,k))=LOC()+w * (n * (j-1)+(k-1)) ; w az alapadat tárolási mérete 5
3. Mutatók és mutatótömbök P változó mutató, ha egy egyszerű változó, vagy egy tömbelem memóriacímét tartalmazza. Általában dinamikus tárolásra használják mutatókból is lehet tömböt szervezni, ezek mindegyik eleme mutató például változó méretű adatsorok, szabálytalan tömbök tárolására használható LB SOR1 LB SOR1 +1 UB SOR1-1 UB SOR1 LB SOR2 LB SOR2 +1 UB SOR2-1 UB SOR2 LB SORn-1 LB SORn-1 +1 UB SORn-1-1 UB SORn-1 LB SORn LB SORn +1 UB SORn S LB SOR1 LB SOR1 +1 UB SOR1-1 UB SOR1 v LB SOR2 LB SOR2 +1 UB SOR2-1 UB SOR2 S v S LB SORn-1 LB SORn-1 +1 UB SORn-1-1 UB SORn-1 LB SORn LB SORn +1 UB v SORn S v Sor 1 Sor 2 Sor n-1 Sor 4 3.1 Példa Mutató aritmetika Ha P változó mutató, akkor a P+1 kifejezés a következő memóriacímet jelenti 6
3.2 Példa - Egy csoport elemeinek bejárása P sorelemre mutató segéd-pointer, az i. csoport címe C i mutató, az (i+1). csoport címe C i+1 P=C i P<C i+1 P=P+1 Bejárás 4. Rekordok, rekordszerkezetek, állományok rekord egymáshoz tartozó (a világ egy egyedére vonatkozó) adattételek (mezők, attribútumok) gyűjteménye. az adattételek lehetnek összetettek** és tovább nem bonthatók egyszerűek* például változó méretű adatsorok, szabálytalan tömbök tárolására használható z állomány rekordok összessége. Név LB Lakcím** SOR1 +1 Testmagasság Testsúly* LB SOR1 4.1 Szintszám, minősítés z adattételek lehetnek összetettek, altételekkel. Például: Gyermek Gyermek.nya.Név Név pa Név nya Név 7
5. Kapcsolt listák kapcsolt lista vagy egyirányú lista adatelemek, vagy csomópontok lineáris gyűjteménye, ahol az elemek sorrendjét mutatók rögzítik. a mutatókat tároló elemet kapcsolómezőnek hívjuk. Start x 5.1 Kapcsolt listák a memóriában Minden csomóponthoz egy tömbelemet (INFO(k) az indexelt csomópont), Minden követőhöz egy másik tömbelemet (LINK(k)) rendelünk. Start INFO (,) (1,1) (1,) (,1) (,) LINK 3 4 2 5 x 5.2 Kapcsolt listák bejárása PTR mutató az éppen feldolgozott csomópontra mutat. kezdetet a STRT mutató jelöli. vége NULL Hasonló mint a lineáris tömb. 8
PTR=STRT PTR NULL PTR=LINK(PTR) {PTR} INFO feldolgozás 5.3 Keresés kapcsolt listában Ugyanaz mint lineáris esetben, csak az összehasonlítás és a léptetés elválik PTR=STRT PTR NULL PTR=NULL LOC= {PTR} KER= {PTR} INFO PTR=LINK(PTR) 9
5.4 Keresés rendezett listában Nem ugyanaz, mint lineáris esetben, mert nem tudjuk a középsőt PTR=STRT PTR NULL PTR=LINK(PTR) PTR=NULL LOC=PRT KER= {PTR} INFO {PTR} INFO<KER PTR=LINK(PTR) 5.5 Beszúrás kapcsolt listába Start Start x x 1
5.6 Törlés kapcsolt listából Start x Start x 5.7 Kétirányú listák Minden irányban bejárható Első INFO x INFO INFO INFO x 5.8 Beszúrás kétirányú listába Első INFO x INFO INFO INFO x Utolsó Utolsó INFO 5.9 Törlés kétirányú listából Első INFO x INFO INFO INFO x Utolsó 11
6. Verem (Stack) Last In First Out Új elem behelyezése (PUSH) a tetejére (TOP) Elem leemelése (POP) 6.1 verem tárolása a b c d 6.1.1 PUSH TOP TOP=TOP+1 STCK(TOP)=Elem maxstk TOP<MXSTK túlcsordul 6.1.2 POP Elem=STCK(TOP) TOP=TOP-1 TOP= alulcsordul 12
6.2 Rekurzió 6.2.1. Faktoriális iteratív definíció n!=1 2 3 (n-2) (n-1) n Fakt=1 k=1 k<=n N= Fakt=Fakt*k Fakt=1 6.2.2. Faktoriális rekurzív definíció!=1 ; n!=n (n-1)! Fakt()=n * Fakt(n-1) N= Fakt()=1 verem és az alprogram kapcsolata 13
7. Sor (Queue) First In First Out 6.1 sor Első x Windows multitasking Eszközök Nyomtató Lemezek Billentyûzet Egér Üzenetek Várakozó sor Sor vége Rendszer lkalmazások Üzenetek 32 bites szál várakozó sor 32 bites szál várakozó sor 32 bites szál várakozó sor elsõdleges 16 bites alk. várakozó sor 14
8. Bináris fa Elemek véges halmaza, amely vagy üres vagy egyetlen T elemhez (gyökér) kapcsolt két diszjunkt T1 ésd T2 részfa alkotja gyökér (szülő, apa) R() - jobboldali részfa B C (C,F,G, I, J, K) L() baloldali részfa D E F G (B, D, E, H) C jobboldali szukcesszora (gyermek, leszármazott) H I J B baloldali szukcesszora Minden csomópontnak, 1, illetve 2 szukcesszora K lehet Zárócsomópont - szukcesszor z összekötő vonalak - élek, szukcesszor - levél utolsó él - ág Szintszám : gyökér - leszármazott - szülő+1 Generáció : azonos szintszámú elemek Mélység : az azonos ágon elhelyezkedő elemek maximális száma Teljes : az utolsó szintet kivéve a csp-k száma maximális Kiterjesztett bináris fa minden csomópontnak /2 gyermeke van 15
8.1 Bináris fák ábrázolása kapcsolt szerkezettel Root B C D x x E x x F x G x H x x I x J x x K x 8.2 Bináris fák ábrázolása tömbökkel Root 1 2 3 4 5 6 7 8 9 1 11 12 13 vail C G J K F I B D H E L(Root) R(Root) 1 7 8 5 11 12 2 3 4 13 16
8.3 Bináris fák szekvenciális ábrázolása a gyökér T(1) ha egy csomópont a T(k)-n van, akkor ha van L(T(k))=T(2*k) egyébként NULL akkor ha van R(T(k))=T(2*k+1) egyébként NULL B C D E F G 1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 B C D E F G NULL NULL NULL NULL NULL NULL NULL NULL 8.4 Bináris fák bejárása Több lehetőség. Pl. a G gyökér z L(G) bejárása az irányítás szerint, z R(G) bejárása az irányítás szerint, D B C E F G H I J K 17
6.4.1. Pl. az irányítással megegyező bejárás NULL a STCK-en PTR a gyökéren meddig a PTR=NULL az összes L() feldolgozása az összes R() a STCK-re PTR=L(PTR) léptetés TOP=1 PTR=STCK legfelső elemével (ha nem NULL, R feldolgozás) STCK(TOP)=NULL PTR=Gyökér PTR NULL STCK(TOP)=R(PTR) TOP=TOP+1 R(PTR) NULL DT(PTR) feldolgozás PTR=L(PTR) DT(PTR) feldolgozás L(PTR) NULL H D B C E F G I J TOP=TOP-1 PTR=STCK(TOP) K 18
9. Általános fa Elemek véges halmaza (T), amely Tartalmaz egy kitüntetett R gyökérelemet többi elem nem nulla diszjunkt részfája T-nek B C D E F G H I J K L 9.1 Tárolás számítógépen INFO(k) - az elem adatai GYERMEK(k) - az első gyermek TESTVÉR(k) - az első testvér 1 2 3 4 5 6 7 8 9 1 11 12 13 INFO B C D E F G H I J K L TESTVÉR GYERMEK 3 5 7 8 1 12 13 2 6 9 11 19
1. Gráf Két halmazzal jellemezhető adatszerkezet Csomópontok sorszámozott halmaza (csúcsok) z elemeket összekötő e=[u,v] számpárral jellemzett élek halmaza az összekötött csomópontokat szomszédoknak hívjuk deg(u) a csomópont foka, a befutó élek száma deg(u)= izolált csomópont v -ból v n -be haladó élek halmazát P(v, v 1, v ) útnak nevezzük. P út zárt, ha v =v n P út egyszerű, ha minden pontja különböző Kör a 3-nál hosszabb egyszerű zárt út. Összefüggő egy gráf, ha bármely két pontja között létezik út. Egy G gráf akkor és csak akkor összefüggő, ha bármely két pontja között létezik egyszerű út. Egy gráf teljes, ha minden csomópontja minden csomópontjával össze van kötve. fa köröket nem tartalmazó összefüggő gráf G gráf címkézett, ha éleihez adatokat rendelünk. Ha G gráf éleihez rendelt adatok nem negatívak, akkor a gráfot súlyozottnak hívjuk. G gráf irányított, ha az éleknek irányítottságuk van 2
21 1.1 Szekvenciális tárolás számítógépen Szomszédsági mátrix a i,j =1 ha i-ből j felé halad él a i,j = egyébként C B D D 1 C B 1 1 D C B Útmátrix p i,j =1 ha i-ből j felé halad valamilyen út a i,j = - egyébként Ha a G gráf szomszédsági mátrixa, akkor k mátrix i,j. eleme az i-ből j-be vezető K hosszú utak számát adja. D C B 1 D C B 2 Egy m pontból álló irányított gráf útmátrixának p ij tagja akkor és csak akkor 1, ha a + 2 +.+ m mátrix i,j. eleme nem.
1.2 Kacsolt szerkezetes tárolás Pontlista (,) (4,) (4,2) (,2) (,2) (4,2) Éllista (,) (4,) 22