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

Egyenesvonalú ( lineáris ) adatszerkezetek Absztrakt  Konkrét adatszerkezetek Specifikáció  Megvalósítás Szekvenciális elérés (fájl. perifériák) Véletlen.

Hasonló előadás


Az előadások a következő témára: "Egyenesvonalú ( lineáris ) adatszerkezetek Absztrakt  Konkrét adatszerkezetek Specifikáció  Megvalósítás Szekvenciális elérés (fájl. perifériák) Véletlen."— Előadás másolata:

1 Egyenesvonalú ( lineáris ) adatszerkezetek Absztrakt  Konkrét adatszerkezetek Specifikáció  Megvalósítás Szekvenciális elérés (fájl. perifériák) Véletlen elérés (vektor, fájl, perifériák, RDBMS-ek, Random Access Memory) (Alap)műveletek és hatékonyságuk –Olvasás (Szelektor) –Beírás –Létrehozás (Konstruktor) és Beszúrás –Törlés –Keresés –Rendezés

2 Tömbök SILAN nyelven class Person { attribute String name; attribute Person [0..*] child;}; class Person { attribute String name; attribute Set(Person) children;};

3 Példa: tömbök Java nyelven tipus[] nevek;//tömbhivatkozás nevek = new tipus [12];//helyfoglalás int[] szamok = {1, 2, 3};//kezdőértékezés (konstruktor) DE!! HIBÁS!! szamok = {1, 2, 3}; szam = szamok[4];//kiolvasás – szelektor szamok[4] = szam;//beírás Keresést, beszúrást, törlést ciklussal be kell programozni!! Többdimenziós tömbök Kétdimenziós tömb: egydimenziós tömbök tömbje. Pl: m méretű tömbökből felépített n méretű tömb: tipus[n][m] nevek;

4 Rekordszerkezet Több, esetleg különböző részekből összetett adattípus Osztály, függvények nélkül, csak látható tagokkal Véges, ha az összetevők végesek, és ha nem rekurzív Pascal: változtatható rekord: típusegyesítés Feltehetőleg: helytakarékosság célzatából type geographicalLocation = record case kind:(WGS,EOV) of WGS:(lat:Real,long:Real); EOV:(x,y:Real) end

5 A Pascal halmazfogalma type halmazom = set of tipusom … ahol „tipusom” egy véges számosságú típus ábrázolása: karakterisztikus függvény, bitvektor

6 A Pascal fájl-fogalma type filem = file of tipusom Tetszés szerint növekedő sorozatok leírására type file2m = file of file of tipusom Szegmentált fájlok leírására type text = file of char standard szövegfájlok

7 Vermek és sorok Last In First Out (LIFO) – First In First Out (FIFO)

8 Vermek, megvalósítása public class verem { int max = 100; int tomb[] = new int[max]; int teteje=0; public boolean ures() { return (teteje == 0);} public void beszur(int elem) { tomb[teteje++]=elem;} public int kivesz() { return (tomb[--teteje]);} public boolean tele() { return (teteje==max);} } int: teteje; (az első üres helyre mutat)

9 Sorok int: farka; (az első üres helyre mutat, ide állítjuk az új elemet) int: feje; (a legelső tele elemre mutat) int: farka; (az első üres helyre mutat, ide állítjuk az új elemet) int: feje; (a legelső tele elemre mutat) Újabb állapotjelző - Hogy néz ki az üres sor - Hogy néz ki a tele sor - Hogy valósítható meg az állapotdiagram

10 Sorok (tovább) Másik megoldás két állapotjelzővel, de kicsit (talán) egyszerűbb algoritmussal Állapotjelző

11 Sorok (programkód) public class sor { int max = 100; int tomb[] = new int[max]; int feje=0; int farka=0; boolean ures=true; boolean tele=false; public boolean ures() { return (ures);} public boolean tele() { return (tele);} public void beszur(int elem) { tomb[farka]=elem; ures = false; if (farka

12 Láncolt listák A listaelemek nem feltétlenül helyezkednek el növekvő sorrendben!!! Megvalósítás? Házi feladat…

13 Változók helyfoglalása public static int RFactorial(int n) { if (n==0) return 1; return RFactorial(n-1)*n;} public static void main (String[] args) {… int n=5; int [] szamok = new int[5]; System.out.println(RFactorial(n)); …} Helyi változók Dinamikus memória (heap) Hely szerint: - helyi - globális Mód szerint: - változó értékét tároljuk - változó hivatkozást tároljuk Eljárás belépéskor a vermen helyet foglalunk Eljárásból kilépéskor a vermet ürítjük, és elengedjük a globálisan foglalt területeket

14 Dinamikus memóriakezelés Lefoglalás(C): malloc(int size):long Elengedés: mfree(long address) Meglehetősen gyakori művelet (átlag: 40% proc. idő!!) Megvalósítás: szabad memória (növekvő) láncolt listában Malloc: a szabadlistán megkeressük az első megfelelő méretű szegmenst Mfree: a szabadlistába beszúrjuk az új szabad szegmenst (+ esetleg egyesítjük a mellette levővel, ha van ilyen) Multi-tasking/Multi-threading környezetekben (ha a heap közös/globális erőforrás), ronthatja a hatékonyságot

15 - Lefoglalási stratégiák: (malloc(1000)) - cím szerinti sorrendben - az első megfelelőt keressük - a legjobban illeszkedőt keressük - Problémák: - feltöredezés: bár még van hely, egy darabban mégsincs elegendő - lassú: régóta futó alkalmazások esetén végig kell futni a láncon, az pedig hosszú - Felszabadítási stratégiák: (mfree) - megkeressük a közvetlen előtte ill. utána levő szabad blokkot - megvizsgáljuk, hogy van-e illeszkedő szabad blokk - a szabad blokkokat egyesítjük

16 Szemétgyűjtés Ötlet: elmozdítva a foglalt mezőket a szabad mezők egyesíthetők Probléma: ellenőrizhetetlen mutatók Megoldás lényege: ellenőrizhetetlen mutatók ellenőrzése Pl: mutatótáblával Ellenőrizhető mutatók Ellenőrizhetetlen mutatók

17 Programfutás/memóriahasználat lokalitása Mennyi a valószínűsége annak, hogy két egymás utáni utasítás/memória adathozzáférés egymástól ennyi távolságban van… Jó lokalitás: hegyes (pl. program), rossz lokalitás (lapos)

18 Többféle lefoglalási stratégia (kicsi, közepes, nagy szegmensekre) Idő-Tárhely (bizonytalansági reláció) Fix méretű szegmensek 256byte alatt (a legelső elemet vehetjük) / (a leggyakoribb foglalási méret <256!) / fix méretű struktúrákhoz Minden mérethez külön szabad lánc! Középméret (256-64kB) Virtuális memória / swapping  szabadlista végigjárása Laptáblában a szabad memória méretét is tároljuk, laponként külön szabad lista  csak 1 lapon belül keresünk szabad helyet  egymás utáni foglalások lehetőleg ugyanarra a lapra esnek  jobb a program lokalitása Nagy szegmensekre (ami nagyobb, mint a lapméret) normál foglalási algoritmus MicroQuill:SmartHeap Dinamikus memóriakezelés

19 Dinamikus memóriakezelés tipikus hibái Lefoglalt terület előtti vagy mögötti tilos területre írás (pl. string összefűzéskor) Felszabadított terület írása/olvasása mfree(pointer); mfree(pointer); //dupla felszabadítás pointer=malloc(1000); Pointer=0; //memória-lyuk (leaking memory, Speicherloch)

20 Dinamikus memóriakezelés referenciaszámlálóval (pl. Java, VB) Employee munkas = new Employee; Employee dolgozo = munkas; dolgozo = new Employee; munkas = new Employee; Employee1munkas Employee2 munkas dolgozo Employee1 dolgozo munkasEmployee1 0 dolgozo munkasEmployee1 1

21


Letölteni ppt "Egyenesvonalú ( lineáris ) adatszerkezetek Absztrakt  Konkrét adatszerkezetek Specifikáció  Megvalósítás Szekvenciális elérés (fájl. perifériák) Véletlen."

Hasonló előadás


Google Hirdetések