Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Relevanta dokument
Länkade strukturer. (del 2)

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer. föreläsning 3. Stacks 1

Introduktion till Java

Samlingar Collection classes

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll

Föreläsning 3. Stack

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Stackar, köer, iteratorer och paket

Föreläsning 3. Stack

Föreläsning 12. Länkade listor

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

DAT043 - föreläsning 8

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Repetition av OOP- och Javabegrepp

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning 2 Datastrukturer (DAT037)

Repetition av OOP- och Javabegrepp

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Samlingar Collection classes

Föreläsning 2. Länkad lista och iterator

Föreläsning Datastrukturer (DAT036)

Föreläsning 10. ADT:er och datastrukturer

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 2 Innehåll

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Länkade strukturer, parametriserade typer och undantag

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Föreläsning 2. Länkad lista och iterator

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Föreläsning 11. ADT:er och datastrukturer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Collection classes. Interface, första exempel. Interface (forts) Men först

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

OOP Objekt-orienterad programmering

Föreläsning 14 Innehåll

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Collection Classes. bjectorienterad programmering Sida 1

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Lösningsförslag till exempeltenta 2

Objektorienterad Programmering (TDDC77)

Tentamen i Algoritmer & Datastrukturer i Java

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Programmering för språkteknologer II, HT2014. Rum

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

Föreläsning 3-4 Innehåll

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Arrayer. results

Generisk klass med typparameter Inre klass - ListIterator

Sammansatta datatyper Generics: Parametrisk polymorfism

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Algoritmer och datastrukturer. HI1029 8,0 hp Föreläsning 1

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

Föreläsning 2 Innehåll

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

So far... For recursive and iterative programs. Bubble, insertion, selection, quick, merge, counting

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3 Datastrukturer (DAT037)

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Föreläsning 2 Datastrukturer (DAT037)

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Interfacen Set och Map, hashtabeller

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Programmering fortsättningskurs

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 10 Innehåll

Länkade listor, stackar och köer

Tentamen i Algoritmer & Datastrukturer i Java

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

Föreläsning 8: Exempel och problemlösning

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Saker du ska kunna Föreläsning 13 & 14

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Föreläsning 3 Innehåll

Diskutera Sortera objekt

Transkript:

Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering Direktinitiering: int[] minalottonummer = {1 4 8 12 15; // allok genom initiering Programmering tillämpningar och datastrukturer 2 Kan ha array av vad som helst Arrayer Arrayer MÅSTE allokera utrymme i förväg! int[] tel new int[10]; Pingvin[] minapingviner Pingvin[3]; String[] mystrings; mystrings = new String[10]; pekar på null Om man har blandade element Test med instaceof och typomvandling Vad händer om 10 element visar sig vara för litet? Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 double[][] matris = new double[3][5]; Array av arrayer [0][0] [0][4] Array av arrayer Egentligen en array av objekt, av typen array matris [2][0] [2][4] matris[0] matris[1] matris[2] Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6

Ger lite mer flexibilitet är arrays Snabbare åtkomst än för listor Vad man inte kan göra Ändra längden (kapaciteten) ArrayList Då slängs gamla ArrayList och en ny skapas Lägga in eller ta bort element utan att behöva flytta på andra element ArrayList ArrayList jobbar med Object Kan inte lägga in primitiva datatyper Måste först slå in dem i en wrapper class new Integer(42); Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Användning Några metoder i ArrayList ArrayList minatal = new ArrayList(); int[] tal = {5, 7, 2, 15; int i; for (i = 0; i < tal.length; i++) { minatal.add(new Integer(tal[i])); i = 0; while (i < minatal.size()) { System.out.print(minaTal.get(i) + ", "); i++; wrapper class Object get(int index) Object set(int index, Object o) int size() boolean add(object o) void add(int index, Object o) indexof(object o) remove(int index) remove(object o) Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 Generiska datatyper Generiska datatyper Object Object Fågel Fågel +flyga() +flyga() Rovfågel Rovfågel Duva Duva ArrayList ArrayList<Fågel> ArrayList<Fågel> minafåglar = new ArrayList<Fågel>(); // fill the list for (i = 0; i < minafåglar.size(); i++) { Fågel f = minafåglar.get(i); // no need to downcast Pingvin Falk Pingvin Falk +flyga() +flyga() Programmering tillämpningar och datastrukturer 11 OBS att minafåglar måse initialiseras! Annars nullpointer exception Programmering tillämpningar och datastrukturer 12

Generiska datatyper Container-klasser vill ha Object som argument och returnerar Object Kräver typomvandling hos klienten (den som anropar) I Java 1.5 kan man ange vilken typ av element man vill att containern ska jobba med ArrayList<String> LinkedList<MinFil> Generiska datatyper ArrayList<String> minanamn = new ArrayList<String>(); Ger en arraylista som bara kan innehålla strängar minanamn.get(3); kommer nu att returnera en sträng (behöver inte typomvandla) Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Listor Länkade strukturer Noder = Objekt Länk = instansvariabel som pekar på nästa element (= nästa nod) Sista referensen är null Jfr cons-box i Lisp Programmering tillämpningar och datastrukturer 16 Länkade listor Protokoll för LinkedList size() ator() add(object) clear() nod1 nästa = data = 5 nod2 nästa = data = 12 nod3 nästa = null data = 43 add(index, Object) remove() hasnext() next() get(index) set(index) isempty() hasprevious() previous() Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18

Lista med header information Egen dubbellänkad lista 3 Bygger på två klasser: 1. Lista (innehåller header-info) 2. Nod (innehåller länkarna) (Nod ofta privat inre klass till Lista) xyz äpple aaa lista2 2 päron slut Programmering tillämpningar och datastrukturer 20 Append Append 3 3 xyz äpple aaa xyz äpple aaa päron slut päron slut lista2 2 lista2 2 Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Append Append (dubbellänkad lista) 5 lista2 xyz äpple aaa 2 päron slut public class Lista { första; sista; storlek; public void append(lista lista) { sista.nästa = lista.första; lista.första.förra = sista; sista = lista.sista; // appenda lista till dig själv Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24

Lista med header-info Tar lite extra minnesutrymme Lättare att appenda Lättare att lägga till i slutet Bra för att implementera köer Abstrakta datatyper Programmering tillämpningar och datastrukturer 25 Procedurell abstraktion Abstraktion Skilja på vad som ska utföras och hur detta utförs Dataabstraktion Skilja på data och hur dessa organiseras och lagras Information hiding Dölja information om hur klasser och objekt är implementerade Abstrakta datatyper (ADT) Vill kunna återanvända kod Modulär kod Data + metoder som opererar på data Allt som behövs finns samlat på samma ställe Klasser med privata variabler private var Speciella metoder för att komma åt data public get() Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 Abstrakta datatyper Ex. ArrayList (paketet java.util.*) Kapslas in i en klass Tillsammans med metoder för Allokering av önskat utrymme Automatisk utökning vid behov Insättning av element Sortering Etc. client behöver tjänst ArrayList klasslista = new ArrayList(); Iterator = klasslista.ator(); Element femte =.get(5); server utför tjänst ADT class ArrayList { private int element; public class Iterator { private int pos; public Iterator ator() { return new Iterator(); Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30

MyList implementeras utan insyn Iterator Vill inte behöva veta om framåt-länken heter nästa, next eller kompis Klassen MyList.Iterator fungerar som in-port Ska erbjuda Sätt att komma ihåg nuvarande position Sätt att ta fram nästa/förra element Iterator MyList mylist = new MyList(); // initiera listan MyList.MyIterator = mylist.ator(); // få en ator.hasnext(); // slutet av listan? ett objekt som anroparen förvaltar själv Kommer ihåg sin position i listan Jfr bokmärken på webben Erbjuder ett antal användbara metoder Ex. finns det något nästa element? Ex. flytta fram ett steg Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Interfacet ListIterator Metoder: Object next(), Object previous() Ge nästa/förra element boolean hasnext(), boolean hasprevious() Finns fler element bakåt eller framåt? Programmering tillämpningar och datastrukturer 33 add(object node) ListIterator interface Lägg till detta element före den position som man står på just nu remove() Ta bort det element som returnerades sist med next() eller previous() OBS! Krav på att varje anrop på remove() föregås av anrop på next() eller previous() Annars ska runtime error genereras Programmering tillämpningar och datastrukturer 34 Få en ator (exempel) public class Test { public void add(object obj) { LinkedList mylist = new LinkedList(); MyList.ListIterator = mylist.ator();.add(new Integer(3)); Hur implementeras atorn? Note that the remove() and set(object) methods are not defined in terms of the cursor position; they are defined to operate on the last element returned by a call to next or previous() Dvs. håll reda på vad atorn returnerade sist från next() eller previous() Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36

Hur implementeras atorn? Hur implementeras atorn? MinLista = new MinLista();.add(); MinIterator =.ator(); MittEl nästael =.next(); if (nästael.udda()) {.remove(); 0 1 2 3 4 Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Hur implementeras atorn? Hur implementeras atorn? public void remove() { if (sistret!= null) { if () { // början av listan första = första.nästa; public void remove() { sistret.nästa.förra = null; Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Hur implementeras atorn? Hur implementeras atorn? public void remove() { sistret.nästa = null; public void remove() { sistret = null; Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42

Hur implementeras atorn? Omedelbart nytt anrop:.remove(); FEL! Programmering tillämpningar och datastrukturer 43 class MinLista extends { class MinNod { private MinNod nästa; private Object innehåll; class MyIterator implements { private int pos; public MyIterator ator() { return new MyIterator(); MinLista List Iterator Programmering tillämpningar och datastrukturer 44 Collections Utgångna klasser Collection ArrayList List AbstractList Vector AbstractCollection AbstractSequentialList AbstractSet HashSet Set SortedSet TreeSet Vector Använd ArrayList istället Stack är dock kvar HashTable Använd HashMap istället Stack LinkedList LinkedHashSet Programmering tillämpningar och datastrukturer 45 Programmering tillämpningar och datastrukturer 46 Oordnad samling Collection Elementen har inga bestämda positioner Meningslöst med metoder som getindex(object o); getnext(); I stället används: contains(); contains(object) add(object) remove(object) size() clear() isempty() ator() Protokoll för Collection Programmering tillämpningar och datastrukturer 47 Programmering tillämpningar och datastrukturer 48

Set Stackar Subklass till Collection Kan inte innehålla duplikat Liknar fjädrande tallrikshållare på restauranger Trycker ner en tallrik på toppen Poppar upp en tallrik från toppen Dvs. last in, first out (LIFO) Programmering tillämpningar och datastrukturer 49 Programmering tillämpningar och datastrukturer 50 Stackar Ex. stack innehållande variabelnamn Efter push( i ); Stackar minafiler namn förra nästa comp i minafiler namn förra nästa comp Programmering tillämpningar och datastrukturer 51 Programmering tillämpningar och datastrukturer 52 Efter peek(); som returnerar i Stackar Efter pop(); som returnerar i Stackar i minafiler namn förra nästa comp minafiler namn förra nästa comp Programmering tillämpningar och datastrukturer 53 Programmering tillämpningar och datastrukturer 54

Implementera stackar Lämpligt att använda datastruktur vars storlek kan förändras ArrayList LinkedList MyList Inlägg och uttag sker alltid i ena änden (toppen av stacken) Ska egentligen inte kunna söka igenom stacken efter element Implementera stackar Delegera anropen push() och pop() till minlista.add() och minlista.remove(): class MinStack { MyList stacken = new MyList(); public push(elem item) { stacken.add(item); Programmering tillämpningar och datastrukturer 55 Programmering tillämpningar och datastrukturer 56 Protokoll för Stack push(element) Lägg på överst Element pop() Ge mig och ta bort översta Element peek() Titta utan att röra empty() // tömmer stacken Element tas bort i början Nya element sätt in i slutet Dvs. first in, first out (FIFO) Precis som köer i affären, etc. Kö till skrivare Köer search(element) Programmering tillämpningar och datastrukturer 57 Programmering tillämpningar och datastrukturer 58 Köer Implementera köer Länkad lista, där man håller reda på första och sista elementet Inläggning sist Borttagning första Programmering tillämpningar och datastrukturer 59 Programmering tillämpningar och datastrukturer 60

Implementera köer, alternativ Cirkulär ArrayList Borttagning genom att flytta markören för första pos Vid fysisk borttagning skulle man behöva flytta alla element ett steg för att fylla luckan Kön kommer att krypa längs arrayen med fler och fler tomma platser i början av arrrayen Implementera köer, alternativ Lösning: Låt stacken krypa runt, dvs. efter index n fortsätta med 0 sista = (sista + 1) % kapacitet; Måste hålla reda på kapacitet (förutom position för första och sista elementet) Generellt Begränsad kapacitet (storleken på arrayen) Programmering tillämpningar och datastrukturer 61 Programmering tillämpningar och datastrukturer 62 Protokoll för Javas Queue boolean offer(element e) // enqueue (insert) Lägg in e sist i kön Returnera false om kön är full E poll() // dequeue (remove) Ta bort första elementet E peek() Titta utan att röra getsize(), isempty() Programmering tillämpningar och datastrukturer 63