Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Hasonló dokumentumok
Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

ZH mintapélda. Feladat. Felület

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

Collections. Összetett adatstruktúrák

Java és web programozás

Reader /Writer InputStreamReader, OutputStreamWriter

Java és web programozás

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

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

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

Programozási technológia

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

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

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

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

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

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

Programozási technológia

Java és web programozás

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Programozási nyelvek Java

Programozás C++ -ban 2007/4

Java programozási nyelv

3. Osztályok II. Programozás II

Programozási nyelvek Java


117. AA Megoldó Alfréd AA 117.

Java és web programozás

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

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

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

Programozási nyelvek II.: JAVA

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Java gyakorlat feladatai e s megolda sai ( )

Elemi adatszerkezetek

Tömbök, kollekciók és egyéb alaposztályok

BME MOGI Gépészeti informatika 8.

C# osztályok. Krizsán Zoltán

OOP: Java 8.Gy: Gyakorlás

Java Programozás 3. Gy: Java GUI. Swing, AWT

Fejlett programozási nyelvek C++ Iterátorok

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

C++ Standard Template Library (STL)

Abstract osztályok és interface-ek. 7-dik gyakorlat

Bánsághi Anna

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Java osztálykönyvtár és használata

Programozási nyelvek II.: JAVA

Segédanyag: Java alkalmazások gyakorlat

Objektumorientált programozás C# nyelven III.

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

Szoftvertechnológia alapjai Java előadások

Felhasználó által definiált adattípus

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Bevezetés a programozásba 2

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

7. K: JAVA alapok Konzultáció

OOP: Java 7.Gy: Öröklődés, referenciák

Kalapácsvetés 2016 szöveges

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

JAVA SE/ME tanfolyam tematika

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

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Imperatív programozás

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

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

Java tutorial. Object. Nehany alaposztaly, amit ismerni illik. tostring. equals vs. ==

OOP: Java 5.Gy: Osztály, referencia, konstruktor

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

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

Stateless Session Bean

Programozás II. labor

Objektumorientált programozás C# nyelven

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

OOP: Java 4.Gy: Java osztályok

.AA Megoldó Alfréd AA.

Programozási nyelvek II.: JAVA, 4. gyakorlat

Magas szintű programozási nyelvek 2 Előadás jegyzet

JNDI - alapok. Java Naming and Directory Interface

Objektumorientált programozás Java-ban

Objektumorientált programozás C# nyelven

Programozás C++ -ban

128. AA Megoldó Alfréd AA 128.

Generikus Típusok, Kollekciók

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Adatszerkezetek és algoritmusok

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

Programozási nyelvek Java

Algoritmusok és adatszerkezetek II.

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Tisztán funkcionális adatszerkezetek

és az instanceof operátor

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

Java programozási nyelv 6. rész Java a gyakorlatban

Átírás:

Dinamikus adatszerkezetek 2D generikus tömb: C++ template<class TYPE> class CArray2D protected: TYPE **m_array; long m_row, m_col; public: CArray2D(long row, long col) // konstruktor m_array = new TYPE*[row]; for(long i = 0; i < row; i++) m_array[i] = new TYPE[col]; m_row = row; m_col = col; ~CArray2D() // destruktor for(long i = 0; i < m_row; i++) delete [] m_array[i]; delete m_array; ; 2 / 35 2D generikus tömb: C++ template<class TYPE> class CArray2D const TYPE* operator[](long i) return m_array[i]; // kettős indexeléshez CArray2D(CArray2D& array) // másoló konstruktor m_row = array.m_row; m_col = array.m_col; m_array = new TYPE*[m_row]; for(long i = 0; i < m_row; i++) m_array[i] = new TYPE[m_col]; for(long j = 0; j < m_col; j++) m_array[i][j] = array[i][j]; ; 3 / 35 1

2D tömb: Java versus C++ C++ Java #include "Array.h " CArray<int> array(10, 20); int[][] array = new int[10][20]; array[5][10] = 7; array[5][10] = 7; int i = array[5][10]; int i = array[5][10]; 4 / 35 2D tömb: Java deklaráció és inicializálás egy lépésben: int[][] A = 1, 0, 12, -1, 7, -3, 2, 5, -5, -2, 2, 9 ; 5 / 35 2D tömb: Java Objektumok tömbben Foglaljunk több elemet mint amennyi aktuálisan kell Tartsuk nyilván a következő szabad elemet int[] lista = new int[100]; int index = 0; lista[index] = a; index += 1; Nem átméretezhető Nem alkalmas objektumok közötti leképezés megvalósítására (Legalább három tömb kell) Nem támogatja a duplikációk kiszűrését A keresés lineáris idejű 6 / 35 2

Előre definiált dinamikus adatszerkezetek nincs kötött méretük gyakori műveletek előre definiáltak listák, halmazok, kulcs-érték párok 7 / 35 Generikus szerkezetek Object-eket tárolnak Object-re/-ről kell konvertálni mindig Korlátozható a típus (Generics) csak az adott típust kezeli nem kell konverzió 8 / 35 Lista (List) módosítható lista tömbökkel megvalósítva műveletek elemek hozzáadása elemek törlése indexelt írás/olvasás elemek bejárása 9 / 35 3

Lista import java.util.arraylist; class ListaPelda public static void main(string[] args) ArrayList<String> lista = new ArrayList<String>(); lista.add("aladar"); lista.add("bela"); lista.add("cecil"); System.out.println(lista.size()); System.out.println(lista.get(2)); lista.set(1, "Dome"); lista.remove(0); for(string s : lista) System.out.println(s); 10 / 35 Halmaz (Set) matematikai halmaz műveletek elem hozzáadása elem törlése tartalmazás vizsgálat típusai HashSet: rendezetlen hashelt halmaz TreeSet: rendezett halmaz 11 / 35 Halmaz import java.util.treeset; class HalmazPelda public static void main(string[] args) TreeSet<String> halmaz = new TreeSet<String>(); halmaz.add("cecil"); halmaz.add("aladar"); halmaz.add("bela"); System.out.println(halmaz.size()); System.out.println(halmaz.first()); System.out.println(halmaz.last()); halmaz.remove("bela"); for(string s : halmaz) System.out.println(s); 12 / 35 4

Kulcs-érték párok (Map) (kulcs, érték) lista kulcs alapján kereshető az érték egyszerű adatbázis műveletek pár hozzáadása/törlése kulcs alapján keresés típusai HashMap: rendezetlen map TreeMap: rendezett map 13 / 35 Kulcs-érték párok import java.util.hashmap; class MapPelda public static void main(string[] args) HashMap<String, int> map = new HashMap<String, int>(); map.put( Aladar, 2); map.put( Bela, 1); map.put( Cecil, 3); System.out.println(map.size()); map.remove( Bela ); int i = map.get( Aladar ); for(string s : map.keyset()) System.out.println(s); for(int i : map.values(i) System.out.println(i); for(map.entry<string, int> par : map.entryset()) System.out.println(par); 14 / 35 Iterátorok Collection.iterator() az interfészt implementáló osztályban van definiálva legyártja a konkrét adatszerkezet bejárásához szükséges iterátor objektumot az iterátor belső állapota független a kollekció objektumtól egyszerre több iterátort tudunk használni ugyanazon a kollekción 15 / 35 5

Láncolt lista mint kollekció Kliens Iterator hasnext () next() remove() Collection iterator() List... Set LinkedList.Itr hasnext () next() remove() LinkedList iterator() ArrayList iterator() 16 / 35 Iterátor objektum használata Az iterátor objektum implementálja az Iterator interfészt: public boolean hasnext() igaz ha vannak még elemek public Object next() - visszaadja a soron következő elemet public void remove() - kitörli az iterátor által utoljára visszaadott elemet public void writelist() Iterator iterator = list.iterator(); while(iterator.hasnext()) Student student = (Student)iterator.next(); System.out.println(student); 17 / 35 Adatszerkezet megváltoztatása import java.io.*; import java.util.*; public class Application List list = new LinkedList(); // List list = new ArrayList(); float globalaverage; public Application(String filename) public void writelist() public static void main (String[] args) if(args.length > 0) new Application(args[0]); else System.out.println("usage: Application <input file>"); 18 / 35 6

Rendezett beszúrás public void orderedinsert(comparable newitem) ListIterator iterator = list.listiterator(); while (iterator.hasnext()) Object item = iterator.next(); if (newitem.compareto(item) <= 0) iterator.previous(); break; iterator.add(newitem); 19 / 35 Feladat Egy fájlból diákok adatait olvassuk be, melyek a diák nevéből és átlagából állnak. Az elkészítendő programnak az elért átlag szerinti sorrendben listáznia kell azon diákok nevét, akiknek az átlaga az összátlag felett van. 20 / 35 Student osztály class Student String name; float average; public Student(String n, float a) name = new String(n); average = a; public String getname() return name; public float getaverage() return average; public String tostring() return name + "\t" + String.valueOf(average); 21 / 35 7

Application osztály import java.io.*; import java.util.*; public class Application List list = new ArrayList(); float globalaverage; public Application(String filename) public void writelist() public static void main (String[] args) if(args.length > 0) new Application(args[0]); else System.out.println("usage: Application <input file>"); 22 / 35 Application osztály konstruktora public Application(String filename) int counter = 0; try BufferedReader input = new BufferedReader( new FileReader(new File(filename))); String line; while((line = input.readline())!= null) StringTokenizer tokens = new StringTokenizer(line); String firstname = tokens.nexttoken(); String secondname = tokens.nexttoken(); float average = Float.valueOf(tokens.nextToken()).floatValue(); list.add(new Student(firstName + " " + secondname, average)); globalaverage += average; counter++; catch(nosuchelementexception e) catch(exception e) System.out.println("Error: " + e.getmessage()); globalaverage /= counter; writelist(); 23 / 35 Rendezetlen listázás public void writelist() int size = list.size(); for(int i = 0; i < size; i++) Student student = (Student)list.get(i); if(student.getaverage() > globalaverage) System.out.println(student); 24 / 35 8

Student osztály kiegészítése class Student implements Comparable String name; float average; public Student(String n, float a) name = new String(n); average = a; public String getname() return name; public float getaverage() return average; public String tostring() return name + "\t" + String.valueOf(average); public int compareto(object object) Student student = (Student)object; if(average < student.average) return 1; if(average > student.average) return -1; return 0; 25 / 35 Rendezett listázás public void writelist() Collections.sort(list); // tömb rendezése int size = list.size(); for(int i = 0; i < size; i++) Student student = (Student)list.get(i); if(student.getaverage() > globalaverage) System.out.println(student); else break; 26 / 35 Generikus rendezett láncolt lista class List class ListElem Object data; ListElem next; public ListElem() data = null; next = null; public ListElem(Object d, ListElem n) data = d; next = n; ListElem head, current; public List() head = new ListElem(); current = head; public Object get() public void insert(object data) 27 / 35 9

Rendezett beszúrás head data null old 28 / 35 Rendezett beszúrás public void insert(object data) ListElem elem; for(elem = head; elem.next!= null; elem = elem.next) if(((comparable)data).compareto(elem.data) < 0) break; ListElem old = new ListElem(elem.data, elem.next); elem.data = data; elem.next = old; 29 / 35 Iterátor public Object get() Object result = current.data; if(current.next == null) current = head; else current = current.next; return result; 30 / 35 10

Application osztály konstruktora public Application(String filename) int counter = 0; list = new List(); try BufferedReader input = new BufferedReader( new FileReader(new File(filename))); String line; while((line = input.readline())!= null) StringTokenizer tokens = new StringTokenizer(line); String firstname = tokens.nexttoken(); String secondname = tokens.nexttoken(); float average = Float.valueOf(tokens.nextToken()).floatValue(); list.insert(new Student(firstName + " " + secondname, average)); globalaverage += average; counter++; catch(nosuchelementexception e) catch(exception e) System.out.println("Error: " + e.getmessage()); globalaverage /= counter; writelist(); 31 / 35 writelist() public void writelist() Student student; while((student = (Student)list.get())!= null) if(student.getaverage() > globalaverage) System.out.println(student); else return; 32 / 35 Feladat Definiáljunk egy generikus bináris rendező fát reprezentáló osztályt. A rendezendő objektumokról feltételezzük, hogy implementálják a Comparable interfészt. 33 / 35 11

Node osztály class Node Object data; Node left, right; public Node(Object d) data = d; left = right = null; public void insert(node node) if(((comparable)data).compareto(node.data) > 0) if(left == null) left = node; else left.insert(node); else if(right == null) right = node; else right.insert(node); public void print() if(left!= null) left.print(); System.out.println(data); if(right!= null) right.print(); 34 / 35 Tree osztály class Tree class Node... Node root; public Tree() root = null; public void insert(object data) Node newnode = new Node(data); if(root == null) root = newnode; else root.insert(newnode); public void print() if(root!= null) root.print(); 35 / 35 12