Egyenesvonalú (lineáris) adatszerkezetek

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
 Megfigyelhető, hogy amikor több elem közötti összehasonlítás történik, akkor szükség van egyszerre több értékre is, főleg akkor, ha ezek az értékek jóval.
Összetett adattípusok 8/b tétel
Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
Tömbök C#-ban.
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozás alapjai.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A verem működése fpga-n
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
3. LOGIKAI ADATSZERKEZETEK
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 3. rész – Osztályok I.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
5. előadás Parametrikus polimorfizmus. Generikus programozás
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Az Input-Output használata Az input-outputot a nyelv előredefiniált csomagokon keresztül valósítja meg. Mindegyik csomag az Ada alapcsomag gyereke.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Egyszerű típusok csoportosítása
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Tömbök Csernoch Mária.
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Programozási nyelvek Páll Boglárka.
A REKORD TIPUS Páll Boglárka. Ismétlés: Feladat Készítsünk kimutatást a XI.B osztály tanulóiról. Minden tanuló esetén a következő adatokat tartjuk nyilván:
Listák, Vermek és Várakozási Sorok. Vermek Def: Egy sajátos lista amelyben minden beszúrási illetve törlési művelet csak a lista egyik végén történik.
Struktúra nélküli adatszerkezetek
Adatszerkezetek 1. előadás
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Java programozási nyelv Filekezelés
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Adatbekérés konzolról
A Visual Basic nyelvi elemei
Feladatok (értékadás)
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Algoritmusok és adatszerkezetek
(Bináris) Kupac (heap) adattípus
Példa. Az ábrázolás szemléltetése.  = ({stack, elem },{ create :  stack; push : stack elem  stack}),  = ( {vector, nat, elem}, { create c :  vector.
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
NJSzT Nemes Tihamér Országos Középiskolai Sámítástechnikai Tanulmányi Verseny.
Algoritmusok és Adatszerkezetek I.
Típusok Halmaz (a világ objektumai közül néhány) Neve van
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

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

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

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;

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

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

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

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

int tomb[] = new int[max]; int teteje=0; public boolean ures() { 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)

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

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

Sorok (programkód) public void beszur(int elem) { tomb[farka]=elem; ures = false; if (farka<max-1) farka++; else farka=0; if (farka == feje) tele = true;} public int kivesz() { int elem; elem = tomb[feje]; tele = false; if (feje<max-1) feje++; else feje = 0; if (feje == farka) ures = true; return (elem);} } 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);}

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

Változók helyfoglalása Hely szerint: - helyi - globális Mód szerint: - változó értékét tároljuk - változó hivatkozást tároljuk 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)); …} Eljárás belépéskor a vermen helyet foglalunk Helyi változók Dinamikus memória (heap) Eljárásból kilépéskor a vermet ürítjük, és elengedjük a globálisan foglalt területeket

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

Lefoglalási stratégiák: (malloc(1000)). - cím szerinti sorrendben 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

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

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)

MicroQuill:SmartHeap Dinamikus memóriakezelés 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

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)

Dinamikus memóriakezelés referenciaszámlálóval (pl. Java, VB) Employee munkas = new Employee; Employee dolgozo = munkas; dolgozo = new Employee; munkas = new Employee; munkas 1 Employee munkas 2 Employee dolgozo munkas 1 Employee dolgozo 1 Employee munkas 1 Employee dolgozo Employee 1 Employee