.Net adatstruktúrák. Készítette: Major Péter

Hasonló dokumentumok
Generikus Típusok, Kollekciók

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

Szoftvertechnolo gia gyakorlat

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Listák, szótárak, fájlok Listák, szótárak, fájlok

OOP: Java 8.Gy: Abstract osztályok, interfészek

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Collections. Összetett adatstruktúrák

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Programozási technológia

Smalltalk 2. Készítette: Szabó Éva

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Generikus osztályok, gyűjtemények és algoritmusok

és az instanceof operátor

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Informatika terméktervezőknek

C# gyorstalpaló. Készítette: Major Péter

Programozási nyelvek Java

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Bevezetés a programozásba 2

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

OOP #14 (referencia-elv)

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

3. Osztályok II. Programozás II

C++ Standard Template Library (STL)

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

BME MOGI Gépészeti informatika 7.

Osztályok. 4. gyakorlat

Verem Verem mutató 01

Apple Swift kurzus 3. gyakorlat

BME MOGI Gépészeti informatika 4.

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Programozási nyelvek Java

A C# PROGRAMOZÁSI NYELV

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozási nyelvek Java

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Adatszerkezetek 1. Dr. Iványi Péter

Programozás alapjai II. (7. ea) C++

C# feladatok gyűjteménye

INFORMATIKA javítókulcs 2016

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Információs Technológia

Elemi adatszerkezetek

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Programozási nyelvek Python

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

Java és web programozás

OOP: Java 1.Gy: Java alapok

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Szoftvertechnológia alapjai Java előadások

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Java és web programozás

Web-technológia PHP-vel

Programozási segédlet

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Programozás I. Második ZH segédlet

C++ programozási nyelv Konstruktorok-destruktorok

JAVA PROGRAMOZÁS 2.ELŐADÁS

INFORMATIKAI ALAPISMERETEK

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Access adatbázis elérése OLE DB-n keresztül

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozási Paradigmák. és Technikák

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Komputeralgebra Rendszerek

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Programozási nyelvek Java

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

Adatszerkezet - műveletek

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

117. AA Megoldó Alfréd AA 117.

Mintavételes szabályozás mikrovezérlő segítségével

BME MOGI Gépészeti informatika 5.

INFORMATIKAI ALAPISMERETEK

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz

Példa 30 14, 22 55,

Átírás:

.Net adatstruktúrák Készítette: Major Péter

Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek megtalálhatók a függvénykönyvtárakban. A System.Collection.Generic névtér osztályai valósítják meg őket. Generikusak: bármely adattípusú változók tárolhatóak bennük. Ezeket érdemes használni, hiszen segítségükkel gyorsan érdekes programokat készíthetünk. Hátrányuk, hogy jóval lassabban működnek, mint egy célirányos implementáció, így teljesítmény centrikus esetben használatuk nem ajánlott.

A lista - List Gyakorlatilag olyan, mint egy változó hosszúságú tömb. Konstruktora paraméter nélküli, generikus: List<T>(): adott adattípusú lista létrehozása, ahol T egy típus (pl.: int) Fő metódusai: void Add( T item ): elem hozzáadása void AddRange( IEnumerable<T> collection ): több elem hozzáadása egyszerre (pl.: tömb, másik lista) bool Remove( T item ): elem áltavolítása, ha false-t ad vissza akkor az elem nem szerepel a listán void RemoveAt( int index ): adott indexű elem eltávolítása int IndexOf( T item ): elem sorszámát adja vissza (ha nincs a listán, akkor pedig -1-et) void Clear(): a lista kiürítése T[] ToArray(): a lista átalakítása tömbbé int Count get; : elemek száma Elemek elérése a [] operátorral.

A lista - List //Lista létrehozása List<int> lista=new List<int>(); //Elemek hozzáadása lista.add(2); lista.add(3); lista.add(5); //Összeg kiszámítása int osszeg = 0; for (int i = 0; i < lista.count; i++) osszeg += lista[i]; Console.WriteLine(osszeg); //Lista kiürítése lista.clear();

A sor - Queue A sor adatstruktúrát valósítja meg. Konstruktora generikus, paraméter nélküli: Queue<T>(): sor létrehozása, T az elemek típusa (pl.: int) Fő metódusok: void Enqueue( T item ): elem hozzáadása a sorhoz T Dequeue(): elem kiolvasása a sorból, ezután az elem törlődik a sorból (FIFO: first in first out, az elsőnek berakott elem kerül kiolvasásra legelőször) void Clear(): a sor kiürítése T[] ToArray(): a sor átalakítása tömbbé int Count get; : elemek száma A sor belsejében lévő elemek nem olvashatóak ki.

A sor - Queue //Sor létrehozása Queue<int> sor = new Queue<int>(); //Elemek hozzáadása sor.enqueue(1); sor.enqueue(3); sor.enqueue(4); //Összeg kiszámítása int osszeg = 0; while (sor.count > 0) osszeg += sor.dequeue(); Console.WriteLine(osszeg);

A verem - Stack A verem adatstruktúrát valósítja meg. Konstruktora generikus, paraméter nélküli: Stack<T>(): verem létrehozása, T az elemek típusa (pl.: int) Fő metódusok: void Push( T item ): elem hozzáadása a veremhez T Pop(): elem kiolvasása a veremből, ezután az elem törlődik a vermből (LIFO: last in first out, az utolsónak berakott elem kerül kiolvasásra legelőször) void Clear(): a verem kiürítése T[] ToArray(): a verem átalakítása tömbbé int Count get; : elemek száma A verem belsejében lévő elemek nem olvashatóak ki. A verem működési szempontból a sortól csak az elemek kiolvasási sorrendjében tér el.

A verem - Stack //Verem létrehozása Stack<int> verem = new Stack<int>(); //Elemek hozzáadása verem.push(4); verem.push(6); verem.push(6); //Összeg kiszámítása int osszeg = 0; while (verem.count > 0) osszeg += verem.pop(); Console.WriteLine(osszeg);

A szótár - Dictionary A szótár elempárok tárolására szolgál, melyek közül egyik a kulcs, amely azonosítja az elempárt, másik az érték, minden kulcs egyedi. Gyakorlatilag a szótár úgy viselkedik, mint egy lista, de az elemek indexe itt tetszőleges típusú lehet (pl.: szöveg). Konstruktora generikus, paraméter nélküli: Dictionary<TKey, TValue>(): létrehoz egy szótárt, ahol TKey a kulcs, TValue az érték típusa Fő metódsai: void Add( TKey key, TValue value ): a value érték hozzáadása key kulccsal bool ContainsKey( TKey key ): megadja, hogy szerepel-e egy kulcs a szótárban bool ContainsValue( TValue value ): megadja, hogy szerepel-e egy érték a szótárban bool Remove( TKey key ): eltávolít egy elemet a szótárból, a visszatérési érték a művelet sikerességét jelzi int Count get; : az elemek (kulcsok) száma void Clear(): szótár kiürítése A szótár elemei a [] operátorral érhetőek el. A szótárat foreach ciklussal lehet végig olvasni, amellyel a szótárból KeyValuePair<TKey, TVaule> típusú elemeket kapunk. Ezek Key és Value mezői adják a megfelelő kulcs és érték párokat.

A szótár - Dictionary //Egy 20 elemű tömb előállítása véletlen számokkal 0..9 intervallumban int[] szamok = new int[20]; Random R=new Random(); for (int i = 0; i < 20; i++) szamok[i] = R.Next(10); //Szótár létrehozása Dictionary<int, int> szamokszama = new Dictionary<int, int>(); //Megszámoljuk, hogy hányszor fordul elő egy adott szám a tömbben for (int i = 0; i < szamok.length; i++) if (szamokszama.containskey(szamok[i])) szamokszama[szamok[i]]++; else szamokszama.add(szamok[i], 1); //Kiíratjuk melyik számból hány volt a tömbben foreach(keyvaluepair<int,int> elem in szamokszama) Console.WriteLine(elem.Key.ToString() + ": " + elem.value + " db");

Elemek összehasonlítása Sok esetben lehet szükségünk az elemek sorba rendezésére, ehhez a System.Collections.Generic.IComparer<T> interfészt megvalósító osztályra van szükségünk. A T azon adattípus, amelyen majd összehasonlítást végzünk. Ennek fő metódusa: int Compare( T x, T y ): összehasonlít két azonos típusú elemet, visszatérési értéke: negatív, ha x kisebb, mint y nulla, ha x egyenlő y pozitív, ha x nagyobb, mint y

Szótár elemek összehasonlítása Az összehasonlító osztály, amely KeyValuePair<string, int> típusú adatokat hasonlít össze, nagyság szerint csökkenő rendezéshez a Value szerint: class WordComparer : IComparer<KeyValuePair<string, int>> public int Compare(KeyValuePair<string, int> x, KeyValuePair<string, int> y) if (x.value == y.value) return 0; if (x.value > y.value) return -1; else return 1; Használat: WordComparer WC; WC = new WordComparer(); List<KeyValuePair<string, int>> wordlist = new List<KeyValuePair<string, int>>(words.count); wordlist.addrange(words); wordlist.sort(wc);