Föreläsning 3-4 Innehåll

Storlek: px
Starta visningen från sidan:

Download "Föreläsning 3-4 Innehåll"

Transkript

1 Föreläsning 3-4 Innehåll Listor, stackar, köer Abstrakta datatypen lista listklasser i Java, egen implementering Datastrukturen enkellänkad lista Jämföra element metoden equals, interfacet Comparable Abstrakta datatyperna stack och kö Undervisningsmoment: föreläsning 3-4, övningsuppgifter 4-5 och laboration 2 Avsnitt i läroboken: , , 2.10, , Läs gärna även kap 3 (om testning). I 2:a upplagan: , , , , PFK (Föreläsning 3-4) HT / 76

2 Abstrakta datatypen lista Definition En lista är en följd av element. Det finns en före-efter-relation mellan elementen. Begrepp som första elementet i listan, efterföljaren till visst element i listan är meningsfulla. Det finns alltså ett positionsbegrepp. Definitionen innebär inte att elementen är sorterade på något visst sätt t.ex. i storleksordning. 1:a elementet 2:a elementet 3:e elementet 4:e elementet PFK (Föreläsning 3-4) HT / 76

3 Abstrakt datatypen lista Abstrakt datatyp En abstrakt modell tillsammans med de operationer man kan utföra på den. Abstrakt modell: lista Operationer på modellen: Lägga in element i listan (först, sist...) Ta bort ett element ur listan Undersöka om ett visst element finns i listan Ta reda på ett elementet i listan (första, sista...) Undersöka om listan tom... En ADT kan beskrivas av en specifikation av en klass eller av ett interface (t.ex. List i paketet java.util) En klass är en implementering av en ADT (ex. ArrayList). PFK (Föreläsning 3-4) HT / 76

4 Abstrakta modellen lista Verkliga problem Kö av människor Bokregister Schema Inköpslista Abstrakt modell Lista PFK (Föreläsning 3-4) HT / 76

5 Implementering av listor En vektor kan användas för att hålla reda på listans element Ett annat sätt är att utnyttja länkad datastruktur. I en länkad struktur består listan av noder som har en referens till efterföljaren (och ev. till föregångaren). PFK (Föreläsning 3-4) HT / 76

6 Listklasser i java.util Det finns två konkreta generiska klasser i Javas API för listhantering. Båda implementerar interfacet List. <<Interface>> Iterable ArrayList<E>, som implementerats med vektor LinkedList<E>, som implementerats med en dubbel-länkad cirkulär struktur <<Interface>> Collection <<Interface>> List ArrayList LinkedList PFK (Föreläsning 3-4) HT / 76

7 Användning av ArrayList/LinkedList Traversering List<Person> list = new ArrayList<Person>(); list.add(new Person("Kili", 1)); list.add(new Person("Balin", 2)); list.add(new Person("Dori", 3)); // skriv ut alla personerna for (Person p: list) { System.out.println(p); // samma sak med explicit iterator Iterator<Person> itr = list.iterator(); while (itr.hasnext()) { System.out.println(itr.next()); PFK (Föreläsning 3-4) HT / 76

8 Skugga tostring Inuti println(p) anropas metoden tostring på p. Metoden tostring finns i superklassen Object. Skugga (omdefiniera) metoden tostring för att bestämma hur utskriften av objektet ska se ut: public class Person { private String name; private int id; public Person (String name, int id) { this.name = name; this.id = id; public String tostring() { return name + " " + id; PFK (Föreläsning 3-4) HT / 76

9 Interfacet ListIterator Interfacet List i java.util föreskriver att det för listor även ska finnas metoder: /** Returnerar en listiterator som startar i pos i. */ public ListIterator listiterator(int i); /** Returnerar en listiterator som startar i pos 0. */ public ListIterator listiterator(); ListIterator<E> är ett interface som ärver Iterator<E> och där man lagt till metoder för att röra sig även bakåt i listor samt för att sätta in element. PFK (Föreläsning 3-4) HT / 76

10 Interfacet ListIterator <<Interface>> Iterator <<Interface>> ListIterator public interface ListIterator<E> extends Iterator<E> { boolean hasprevious(); E previous(); void add(e x);... PFK (Föreläsning 3-4) HT / 76

11 Diskutera Följande klass beskriver en person: public class Person { private String name; private int; public Person (String name, int id) { this.name = name; this.id = id; Vad skrivs ut när följande rader exekveras? Förklara varför? ArrayList<Person> list = new ArrayList<Person>(); list.add(new Person("Fili", 1)); list.add(new Person("Balin", 2)); System.out.println(list.contains(new Person("Balin", 2))); PFK (Föreläsning 3-4) HT / 76

12 Jämföra likhet Metoden equals Inuti ArrayList används metoden equals för att jämföra om två objekt är lika: if (p1.equals(p2)) {... Metoden equals finns i superklassen Object. Den returnerar true om och endast om de jämförda objekten är identiska. Den testar referenslikhet och fungerar alltså som == i Java. Om vi istället vill att innehållet inuti objekten ska jämföras (här id-numren) måste vi skugga equals klassen Person. Skiss, ej färdig equals-metod: public boolean equals(object obj) { return id == ((Person) obj).id; PFK (Föreläsning 3-4) HT / 76

13 Jämföra likhet Skillnad Java - Scala I Java är == en operator som jämför referenser. Exempel: p1 == p2 ger true om p1 och p2 refererar till samma objekt. I klassen Object finns metoden equals som fungerar som ==. Den måste skuggas om man vill få ett annat beteende i egna klasser. I Scala är == en metod som anropar equals. Skugga equals om annat beteende önskas. Metoden eq testar referenslikhet och p1.eq(p2) ger true om p1 och p2 refererar till samma objekt. PFK (Föreläsning 3-4) HT / 76

14 Användning av ArrayList/LinkedList Söka efter objekt i en lista List<Person> list = new ArrayList<Person>(); list.add(new Person("Kili", 1)); list.add(new Person("Balin", 2)); list.add(new Person("Dori", 3)); // sök efter platsen för elementet med id-nummer 2 int index = list.indexof(new Person(null, 2)); // tag reda på om det finns ett element med id-nummer 2 i listan boolean found = list.contains(new Person(null, 2)); // tag bort elementet med id-nummer 2 ur listan boolean removed = list.remove(new Person(null, 2)); PFK (Föreläsning 3-4) HT / 76

15 Skugga equals att tänka på Parametern till equals måste vara av typ Object, annars blir det inte skuggning och den ursprungliga metoden i klassen Object kommer att användas. De attribut som används i jämförelsen inuti equals bör inte gå att ändra. Deklarera dem final: public class Person { private String name; private final int id;... Annars kan det bli svårt att hitta objektet när det satts in i en lista eller annan samling. När man skuggar equals bör man också skugga metoden hashcode. Metoderna equals och hashcode används när objekt sätts in i en hashtabell. (Behandlas senare i kursen). PFK (Föreläsning 3-4) HT / 76

16 Skugga equals Specifikation public boolean equals(object obj); Ur equals specifikation: x.equals(x) ska returnera true (reflexivitet). Om x.equals(y) returnerar true så ska y.equals(x) returnera true (symmetri). Om x.equals(y) returnerar true och y.equals(z) returnerar true så ska x.equals(z) returnera true (transitivitet). Upprepade anrop av x.equals(y) ska ge samma resultat (konsistens). x.equals(null) ska returnera false. PFK (Föreläsning 3-4) HT / 76

17 Omdefiniera equals med instanceof public boolean equals(object obj) { if (obj instanceof Person) { return idnbr == ((Person) obj).idnbr; else { return false; Observera att parametern till equals måste vara av typ Object, annars blir det inte skuggning. Därför måste också typomvandling till Person ske när man ska använda obj:s idnbr. Uttrycket obj instanceof Person returnerar true om obj:s typ är Person eller någon subklass till Person. Uttrycket obj instanceof Person returnerar false om obj har värdet null. PFK (Föreläsning 3-4) HT / 76

18 Skugga (skugga) equals med instanceof Fördelar och nackdelar Denna lösningen tillåter att subklasser ärver equals-metoden. Man kan därför använda equals i en arvshieariki och jämföra subklassobjekt och superklassobjekt. Kan leda till att equals inte uppfyller kraven i specifikationen om man skuggar equals i subklassen. Därför är det lämpligt att deklarera metoden equals final: public final boolean equals(object obj) {... Nu kan inte equals skuggas i någon subklass till Person. Detta undviks om man bara tillåter jämförelser mellan objekt av samma typ. Se nästa bild. PFK (Föreläsning 3-4) HT / 76

19 Skugga equals med getclass public boolean equals(object obj) { if (obj == this) { return true; if (obj == null) { return false; if (this.getclass()!= obj.getclass()) { return false; return id == ((Person) obj).id; Metoden getclass returnerar typen för det objekt obj refererar till under exekveringen. Bara metoder av exakt samma klass kan anses vara lika. PFK (Föreläsning 3-4) HT / 76

20 Skugga equals med extra metod canequal Ibland blir lösningen på förra bilden för sträng. Det kan man lösa genom att lägga till en extra metod i klassen: public boolean equals(object obj) { if (obj instanceof Person) { Person other = (Person) obj; return other.canequal(this) && this.id == other.id; else { return false; public boolean canequal(object other) { return (other instanceof Person); Bägge metoderna ska skuggas i subklasser. För detaljer läs mer här: PFK (Föreläsning 3-4) HT / 76

21 Diskutera Sortera objekt Klassen Person beskriver en person. Vad händer när följande rader exekveras? Förklara varför? Person[] persons = new Person[4]; persons[0] = new Person("Kili", 1); persons[1] = new Person("Balin", 2); persons[2] = new Person("Dori", 4); persons[3] = new Person("Fili", 3); Arrays.sort(persons); for(person p : persons) { System.out.println(p); PFK (Föreläsning 3-4) HT / 76

22 Interfacet Comparable Specifikation I Java finns ett generiskt interface, Comparable<T>: public interface Comparable<T> { /** * Compares this object with the specified object for order. * Returns a negative integer, zero, or a positive integer as * this object is less than, equal to, or greater than the * specified object. */ public int compareto(t x); Objekt av klasser som implementerar detta interface går att jämföra med varandra och kan t.ex. sorteras. Inuti metoden sort används Comparable som typ för de element som ska sorteras. PFK (Föreläsning 3-4) HT / 76

23 Implementering av interfacet Comparable Exempel public class Person implements Comparable<Person> { private String name; private int id;... public int compareto(person obj) { return Integer.compare(id, obj.id); public boolean equals(object obj) { if (obj instanceof Person) { return compareto((person) obj) == 0; else { return false; PFK (Föreläsning 3-4) HT / 76

24 Jämföra likhet Metoderna compareto och equals Interfacet Comparable innehåller bara metoden compareto. Men för klasser som implementerar interfacet Comparable finns det två sätt att jämföra avseende likhet: Person p1 =...; Person p2 = ;... if (p1.compareto(p2) == 0) {... if (p1.equals(p2)) {... Båda sätten att jämföra bör ge konsistenta resultat. Därför bör metoden equals skuggas i klasser som implementerar Comparable. PFK (Föreläsning 3-4) HT / 76

25 Typparametrar med begränsningar Ibland behöver man ange begränsning på typparmetern: public class ASortedCollection<E extends Comparable<E>> <E extends T> betyder: E måste vara subklass till T om T är en klass. Det är också tillåtet att E = T. E måste implementera interfacet T om T är ett interface. I exemplet ovan anger vi alltså att E måste vara en typ som implementerar interfacet Comparable<E>. Vi kan därmed använda metoden compareto på objekt av typen E i implementeringen av ASortedCollection. PFK (Föreläsning 3-4) HT / 76

26 Egen implementering av listor från grunden Vektor a size 3 objekt som satts in i vektorn PFK (Föreläsning 3-4) HT / 76

27 Egen implementering av listor från grunden Enkellänkad lista first next element next element next element null objekt som satts in i listan PFK (Föreläsning 3-4) HT / 76

28 Enkellänkad lista Implementering public class SingleLinkedList<E> { private ListNode<E> first; // referens till första noden // null om listan är tom..metoder.. /* Statiskt nästlad klass. Representerar en nod som innehåller ett element av typ E. */ private static class ListNode<E> { private E element; // data som lagras private ListNode<E> next; // refererar till nästa nod private ListNode(E e) { element = e; next = null; PFK (Föreläsning 3-4) HT / 76

29 Nästlade klasser i Java Klasser kan deklareras inuti andra klasser (nästlade klasser). Används oftast när den nästlade klassen bara är meningsfull för den omgivande klassen. Användare behöver oftast inte känna till existensen av den nästlade klassen. En nästlad klass kan deklareras private om den bara ska användas i den omgivande klassen. Även konstruktorn kan då vara private. I den omgivande klassen har man tillgång till allt i den nästlade klassen (även det som är private). Det finns två typer av nästlade klasser: statiskt nästlade klasser inre klasser (eng: inner classes). PFK (Föreläsning 3-4) HT / 76

30 Statiskt nästlade klasser public class OuterClass {... public void p() { NestedClass x = new NestedClass();... private static class NestedClass { private NestedClass() { En statisk nästlad klass kan bara komma åt statiska attribut och statiska metoder i den omgivande klassen. PFK (Föreläsning 3-4) HT / 76

31 Inre klasser public class OuterClass { private int i; public void p() { InnerClass x = new InnerClass();... private class InnerClass { private InnerClass() {... private void q() { int b = i;...; // Här används i från OuterClass! Ett objekt av en inre klass kan komma åt allt i det objekt av den omgivande klassen som skapade objektet av den inre klassen. PFK (Föreläsning 3-4) HT / 76

32 Att skapa objekt av nästlade klasser Görs oftast bara i den omgivande klassen. Då blir det samma syntax som vanligt. Exempel finns på föregående bilder. Man kan skapa objekt av nästlade klasser även utanför den omgivande klassen. Kräver dock att den nästlade klassen och dess konstruktor är public. Detaljer på nästa bild. PFK (Föreläsning 3-4) HT / 76

33 Att skapa objekt av nästlade klasser Statiska nästlade klasser Om den nästlade klassen är statisk: public class OuterClass {... public static class NestedClass { public NestedClass() { så skapas en instans av den nästlade klassen med följande syntax: OuterClass.NestedClass x = new OuterClass.NestedClass(...); PFK (Föreläsning 3-4) HT / 76

34 Att skapa objekt av nästlade klasser Inre klasser Om den nästlade klassen är en inre klass: public class OuterClass {... public class InnerClass { public InnerClass(...) { så kan instanser av den inre klassen bara skapas genom ett objekt av den yttre klassen: OuterClass a = new OuterClass(); OuterClass.InnerClass b = a.new InnerClass(); PFK (Föreläsning 3-4) HT / 76

35 Åter till implementeringen av listor... På följande bilder visas implementeringar av några metoder i klassen SingeLinkedList. (Ytterligare exempel finns i övningsuppgifter 4.) public class SingleLinkedList<E> { private ListNode<E> first;... private static class ListNode<E> { private E element; // data som lagras private ListNode<E> next; // refererar till nästa nod... PFK (Föreläsning 3-4) HT / 76

36 Exempel på metoder i en enkellänkad lista Insättning och borttagning först i listan Länka in en ny nod innehållande elementet x först i listan: public void addfirst(e x) { ListNode<E> n = new ListNode<E>(x); n.next = first; first = n; Tag bort första noden i listan, returnera dess innehåll: public E removefirst() { if (first == null) { throw new NoSuchElementException(); ListNode<E> temp = first; first = first.next; return temp.element; PFK (Föreläsning 3-4) HT / 76

37 Exempel på metoder i en enkellänkad lista Traversering av elementen i listan Returnera en sträng som representerar listan: public String tostring() { StringBuilder sb = new StringBuilder(); sb.append( [ ); ListNode<E> p = first; while (p!= null) { sb.append(p.element.tostring()); if (p.next!= null) { sb.append(", "); p = p.next; sb.append( ] ); return sb.tostring(); PFK (Föreläsning 3-4) HT / 76

38 Diskutera Antag att vi ska skriva metoder addlast och removelast för att sätta in och ta bort sist listan. Hur ska vi lösa de problemen? Vilka specialfall finns? PFK (Föreläsning 3-4) HT / 76

39 Exempel på metoder i en enkellänkad lista Insättning sist i listan Länka in en ny nod innehållande elementet x sist i listan: public void addlast(e x) { ListNode<E> n = new ListNode<E>(x); if (first == null) { first = n; else { ListNode<E> p = first; while(p.next!= null) { p = p.next; p.next = n; PFK (Föreläsning 3-4) HT / 76

40 Exempel på metoder i en enkellänkad lista Borttagning sist i listan public E removelast() { if (first == null) { // tom lista throw new NoSuchElementException(); if (first.next == null) { // ett element ListNode<E> temp = first; first = null; return temp.element; ListNode<E> p = first; // minst två element ListNode<E> pre = null; while (p.next!= null) { pre = p; p = p.next; pre.next = null; return p.element; PFK (Föreläsning 3-4) HT / 76

41 Diskutera Två av metoderna vi implementerat, addlast och removelast, är långsammare än motsvarande metoder för att sätta in och ta bort i början av listan. Både addlast och removelast innehåller en loop. Ge förslag på hur man kan implementera listklassen så att dessa loopar kan tas bort. PFK (Föreläsning 3-4) HT / 76

42 Implementering med länkad struktur Kommentarer Exemplen visar att det är viktigt att tänka på specialfall. Vissa operationer blir krångliga i den enkellänkade implementeringen. Dessa kan förenklas om man i varje nod också har en referens till föregångaren. Detta kallas dubbellänkade listor. first last Man kan förenkla implementeringar av vissa operationer ytterligare genom att ha ett speciellt element ("huvud") i början av listan. PFK (Föreläsning 3-4) HT / 76

43 Traversering av listor iteratorer Användare av en listklass behöver möjlighet att gå igenom elementen i listan. Låt därför SingleLinkedList implementera interfacet Iterable: public class SingleLinkedList<E> implements Iterable<E> {... Lägg till metoden Iterator<E> iterator() i klassen SingleLinkedList. Metoden iterator ska skapa och returnera ett iterator-objekt. Skriv en (inre) klass som implementerar interfacet Iterator enligt mönstret: private class MyListIterator implements Iterator<E> {... PFK (Föreläsning 3-4) HT / 76

44 Interfacet Iterator metoder /** Returns true if the iteration has more elements. */ boolean hasnext(); /** Returns the next element in the iteration. */ E next(); /** Removes from the underlying collection the last element returned by the iterator (optional). */ default void remove(); Metoder deklarerade default är redan implementerade. Default-metoden remove genererar UnsupportedOperationException. PFK (Föreläsning 3-4) HT / 76

45 Iteratorklass Inre klassen MyListIterator private class MyListIterator implements Iterator<E> { private ListNode<E> pos; private MyListIterator() {pos = first; public boolean hasnext() {return pos!= null; public E next() { if (hasnext()) { ListNode<E> temp = pos; pos = pos.next; return temp.element; else { throw new NoSuchElementException();... PFK (Föreläsning 3-4) HT / 76

46 Metoden iterator() Klassen SingleListIterator public class SingleLinkedList<E> implements Iterable<E> { private ListNode<E> first;... public Iterator<E> iterator() { return new MyListIterator(); private class MyListIterator implements Iterator<E> { PFK (Föreläsning 3-4) HT / 76

47 Användning av iterator Exempel Nu kan vi iterera genom vår lista: SingleLinkedList<String> list = new SingleLinkedList<String>(); // sätt in några String-objekt i listan... Iterator<String> itr = list.iterator(); while (itr.hasnext()) { String s = itr.next();... Eftersom vår klass SingleLinkedList implementerar interfacet Iterable kan vi också använda foreach -satsen: for (String s : list) {... PFK (Föreläsning 3-4) HT / 76

48 Diskutera Nu när vi implementerat en egen list-klass kan vi jämföra olika list-implementationer: ArrayList implementeras med hjälp av en vektor: Inuti LinkedList används en cirkulär, dubbellänkad struktur: Fördelar, nackdelar? PFK (Föreläsning 3-4) HT / 76

49 ArrayList vs LinkedList ArrayList De indexerade metoderna get(int idx) och set(int idx, E element) är effektiva i ArrayList. Däremot är insättningar och borttagningar (utom sist i listan) långsamma eftersom element måste flyttas. LinkedList De indexerade metoderna är långsamma eftersom listan måste stegas igenom tills önskat element nås. När man väl hittat rätt plats i listan är insättningar och borttagningar snabba. Nod-objekten kräver extra minne och hantering. PFK (Föreläsning 3-4) HT / 76

50 ADT Stack Definition En stack är en följd av element där borttagning av ett element alltid aer det element som senast satts in. Kallas även LIFO-lista, Last In First Out PFK (Föreläsning 3-4) HT / 76

51 ADT Stack En stack beskrivs oftast lodrätt orienterad. Operationer sker på toppen av stacken. push pop PFK (Föreläsning 3-4) HT / 76

52 ADT Stack i java.util I Javas klassbibliotek har man inte infört något interface för ADT:n Stack. Det finns en klass Stack, som ärver en annan klass Vector. Interfacet Deque i java.util innehåller bl. a. de operationer som ska finnas för en ADT Stack: lägg ett element överst på stacken push(e) eller addfirst(e) tag bort och returnera översta elementet pop() eller removefirst() returnera översta elementet peek() eller peekfirst() Exempel på klasser som implementerar interfacet Deque är ArrayDeque och LinkedList. PFK (Föreläsning 3-4) HT / 76

53 Diskutera Klasserna på föregående bild innehåller för många metoder och inte bara de vanliga stack-operationerna. Varför är det ett problem? Hur kan man lösa detta? PFK (Föreläsning 3-4) HT / 76

54 Interface Stack som det borde se ut public interface Stack<E> { /** Lägger x överst på stacken. */ void push(e x); /** Tar bort och returnerar översta elementet från stacken. */ E pop(); /** Returnerar översta elementet på stacken. */ E peek(); /** Undersöker om stacken är tom. */ boolean isempty(); PFK (Föreläsning 3-4) HT / 76

55 Exempel på användning av stack En stack kan också användas till att Kontrollera att parenteser matchar: Om vänsterparentes push(parentes) Om högerparentes pop() Vända på elementen i en lista: För varje element e i listan push(e) Så länge stacken ej är tom pop() PFK (Föreläsning 3-4) HT / 76

56 Exempel på användning av stack Om ett aritmetiskt heltalsuttryck är skrivet i omvänd polsk notation (postfix notation) kan vi använda en stack för att beräkna uttryckets värde. Operatorn placeras efter sina två operander: Ex: * i postfix notation motsvarar uttrycket 3 * (10 12) i vanlig (infix) notation. Fördel: alla uttryck kan skrivas utan parenteser och deras värde kan enkelt evalueras med hjälp av en stack. PFK (Föreläsning 3-4) HT / 76

57 Exempel på användning av stack Algoritm skapa en tom stack s // s = new... så länge uttrycket ej är slut läs in nästa element (tal eller operator) om tal lägg talet på stacken // push annars (operator) hämta de två översta talen t1 och t2 // 2 st. pop från stacken res = resultatet av operatorn använd på t2 och t1 lägg res på stacken // push Nu ska stacken bara innehålla ett värde resultatet. PFK (Föreläsning 3-4) HT / 76

58 Exempel på användning av stack Evaluering av uttrycket: * Läst: inget * Stack: tom Om uttrycket är korrekt så ligger till sist resultatet som enda element på stacken. PFK (Föreläsning 3-4) HT / 76

59 Diskutera Antag att vi behöver en stack i ett program. Ska vi använda en färdig klass? Eller ska vi implementera en egen klass? Hur i så fall? Vilka för- och nackdelar har de olika alternativen? PFK (Föreläsning 3-4) HT / 76

60 Implementering av stack använd färdig klass Alternativ 1 Gör inte någon ny implementering utan använd en redan färdig klass t.ex. ArrayDeque eller LinkedList i java.util. Använd bara de operationer som är tillåtna för stack. + Enkelt Övriga icke-stack-metoder finns tillgängliga. Risk för att anropa fel metod. PFK (Föreläsning 3-4) HT / 76

61 Implementering av stack - delegera till annan klass Alternativ 2 Implementera en egen klass, men använd internt en annan klass. Exempel: public class Stack<E> { private LinkedList<E> elements;... // eller ArrayDeque<E> public push(e x) { elements.push(x); public E peek() { return elements.peek();... PFK (Föreläsning 3-4) HT / 76

62 Delegera till annan klass, forts Alternativ 2 + Slipper risken att anropa fel metoder Många metodanrop. Om vi anropar push i Stack, så anropas också push i LinkedList,... Onödigt komplicerad datastruktur som ev. är vald för att andra metoder ska bli effektiva. Exempel: Datastrukturen i LinkedList är vald så att operationerna på listan ska bli effektiva. Det ät onödigt med dubbellänkad lista för att implementera en stack. PFK (Föreläsning 3-4) HT / 76

63 Implementering av stack - egen klass med enklare datastruktur Alternativ 3 Implementera en egen klass med enklare datastruktur, t.ex. vektor eller enkellänkad lista. + Slipper risken att anropa fel metoder + Färre metodanrop än alternativ 2. T.ex. utför då push sin uppgift utan att delegera vidare till annan metod. + En enklare datastruktur kan ge bättre effektivitet. Mer kod att implementera än i alternativ 1 och 2. PFK (Föreläsning 3-4) HT / 76

64 Implementering av stack Enkellänkad datastruktur Enkellänkad datastruktur för stack: Stacken representeras av referens till första noden. Alla operationer kan då utföras på konstant tid, oberoende av stackens storlek. Behöver extra utrymme för next-referenser. first PFK (Föreläsning 3-4) HT / 76

65 Enkellänkad implementering av stack s = new MyStack<Integer>(); first = null s.push(1); first 1 s.push(2); first 2 1 s.push(3); first int i = s.pop() // i får värdet 3 first 2 1 PFK (Föreläsning 3-4) HT / 76

66 Vektorimplementering av stack Vektorimplementering av stack: Stacken representeras av vektor och index för nästa insättning (initialt 0). Ger konstant tid för metoderna så länge vektorns storlek räcker. Om man dubblar vektorns storlek varje gång den inte räcker till, kan man visa att metoderna fortfarande i medeltal går att utföra på konstant tid. Efter dubblering är bara halva utrymmet i vektorn utnyttjat. PFK (Föreläsning 3-4) HT / 76

67 Vektorimplementering av stack s = new MyStack<Integer>(); size = 0 s.push(1); 1 size = 1 s.push(2); s.push(3) size = 3 int i = s.pop() // i får värdet size = 2 s.push(4); size = 3 PFK (Föreläsning 3-4) HT / 76

68 ADT Kö Definition En kö (FIFO-kö) är en följd av element där insättning alltid görs sist i följden. borttagning alltid avser första elementet i följden. First In First Out poll offer PFK (Föreläsning 3-4) HT / 76

69 Interface Queue minimalt public interface Queue<E> { /** Sätter in x sist i kön. */ boolean offer(e e); /** Tar reda på första elementet i kön. */ E peek(); /** Tar reda på och tar bort första elementet i kön. */ E poll(); /** Undersöker om kön är tom. */ boolean isempty(); PFK (Föreläsning 3-4) HT / 76

70 Interface Queue i java.util <<Interface>> Iterable <<Interface>> Collection <<Interface>> Queue ArrayDequeu LinkedList Genererar exception vid problem Returnerar false/null vid problem Sätta in boolean add(e x) boolean offer(e x) Ta bort E remove() E poll() Ta reda på E element() E peek() PFK (Föreläsning 3-4) HT / 76

71 Implementering av kö Enkellänkad datastruktur Enkellänkad datastruktur för kö: Kön representeras av referenser till första och sista noden. Alla operationer kan då utföras på konstant tid, oberoende av köns längd. Behöver extra utrymme för next-referenser. first last PFK (Föreläsning 3-4) HT / 76

72 Enkellänkad implementering av kö q = new MyQueue<Integer>(); first = last = null q.offer(1); first 1 last q.offer(2); first 2 1 last q.offer(3); first last int i = q.poll() // i får värdet 1 first 2 3 last PFK (Föreläsning 3-4) HT / 76

73 Vektorimplementering av kö Vektorimplementering av kö: Vektorn används cirkulärt; första platsen i vektorn anses vara efterföljare till sista platsen. Kön representeras av vektorn samt index för första (äldsta) elementet front index för sista (yngsta) elementet rear antalet element size Även här kan vi behöva skapa större vektor när antalet element blivit för stort. PFK (Föreläsning 3-4) HT / 76

74 Vektorimplementering av kö q = new MyQueue<Integer>(); front = 0, rear = -1, size = 0 q.offer(1); 1 front = 0, rear = 0, size = 1 q.offer(2); q.offer(3); q.offer(4); q.offer(5); front = 0, rear = 4, size = 5 int i = q.poll() // i får värdet front = 1, rear = 4, size = 4 q.offer(6); front = 1, rear = 0, size = 5 PFK (Föreläsning 3-4) HT / 76

75 Listor, stackar och köer Exempel på vad du ska kunna Förklara vad de abstrakta datatyperna lista, stack och kö är och vilka operationer man förväntas kunna utföra på dem. Implementera en lista, stack eller kö effektivt med hjälp av vektor respektive länkade struktur. Förklara vad nästlade och inre klasser är för något samt kunna implementera sådana. Använda klasser och interface från Java Collections Framework: List, Queue, Deque, ArrayList, LinkedList, ArrayDeque, Iterator, ListIterator och Iterable Skugga metoden equals och implementera interfacet Comparable Man ska naturligtvis inte lära sig utantill exakt vilka metoder som finns i klasser i Javas bibliotek. Det är däremot viktigt att förstå t.ex. begreppet lista så att man kan använda de klasser som finns i biblioteket. PFK (Föreläsning 3-4) HT / 76

76 Datorlaboration 2 Enkellänkad lista Implementera en egen generisk klass som beskriver en FIFO-kö. Inuti mängdklassen ska du använda en cirkulär, enkellänkad lista för att hålla reda på elementen i kön. Utifrån sett ser kön ut så här: Inuti klassen är den uppbyggd så här: next element next element next element last size 3 Tips! Rita för att förstå vad som händer i programmet! Innehåll: kö, enkellänkad lista, iterator, testning med JUnit. PFK (Föreläsning 3-4) HT / 76

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Föreläsning 4 Innehåll

Föreläsning 4 Innehåll Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och

Läs mer

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

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue

Läs mer

Föreläsning 2 Innehåll

Föreläsning 2 Innehåll Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

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

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund Föreläsning 2 Innehåll Generiska klasser Javas samlingsklasser är generiska. Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element metoden equals En generisk

Läs mer

Föreläsning 2 Innehåll

Föreläsning 2 Innehåll Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist. Seminarium 3 Introduktion till Java Collections Framework Innehåll Generik Bakgrund Java Collections Framework interface och klasser för samlingar av element interfacen Iterator och Iterable och foreach-sats

Läs mer

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

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist. Seminarium 2 Introduktion till Java Collections Framework Innehåll Generik Bakgrund Generik används för att få typsäkra datastrukturer Java Collections Framework Standardbibliotek med datastrukturer i

Läs mer

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

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

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

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

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Föreläsning 3 Innehåll

Föreläsning 3 Innehåll Föreläsning 3 Innehåll Jämföra element interfacen Comparable och och Comparator Implementera generiska klasser Exceptions Dokumentationekommentarer javadoc Enhetstestning - junit Datavetenskap (LTH) Föreläsning

Läs mer

Diskutera Sortera objekt

Diskutera Sortera objekt Föreläsning 3 Innehåll Diskutera Sortera objekt Metoden sort är en statisk metod i klassen Arrays. Den sorterar vektorn som skickas med som argument. Jämföra element interfacen Comparable och och Comparator

Läs mer

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

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel Föreläsning 3 Innehåll Generiska klasser Implementera generiska klasser Exceptions Dokumentationekommentarer javadoc Enhetstestning - junit Man kan deklarera en eller flera typparametrar när man definierar

Läs mer

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack

Läs mer

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 TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

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

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack Stack och Kö -Implementering - Tilllämpningar ADS : STACK Det finns ett par vanligt förekommande ADT:er för samlingar av element som egentligen är specialfall av listor. En av dem är Stack Definition:

Läs mer

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 TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

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

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering

Läs mer

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och

Läs mer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

Datastrukturer. föreläsning 3. Stacks 1

Datastrukturer. föreläsning 3. Stacks 1 Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer

Läs mer

Interfacen Set och Map, hashtabeller

Interfacen Set och Map, hashtabeller Föreläsning 0 Innehåll Hashtabeller implementering, effektivitet Interfacen Set och Map ijava Interfacet Comparator Undervisningsmoment: föreläsning 0, övningsuppgifter 0-, lab 5 och 6 Avsnitt i läroboken:

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig

Läs mer

Stackar, köer, iteratorer och paket

Stackar, köer, iteratorer och paket Stackar, köer, iteratorer och paket Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Paket Stackar och köer Array resp länkad struktur Iteratorer Javadoc Kommentarer lab 1 Bra att de flesta

Läs mer

Föreläsning 14 Innehåll

Föreläsning 14 Innehåll Föreläsning 14 Innehåll Abstrakta datatyper, datastrukturer Att jämföra objekt övriga moment i kursen Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Hitta fel i fingerade

Läs mer

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll Föreläsning 10 Innehåll Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Undervisningsmoment:

Läs mer

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket 1 Länkade listor Likadant som i Ada-kursen. 2 Stack MyStack MyStack

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Laboration 2 Datastrukturer En liten uppgift Frågor 1 Laboration 2 - Datastrukturer Länkade datastrukturer Stack Kö (En. Queue) Lista

Läs mer

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

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

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

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 Föreläsning 4 Kö 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 ADT Kö Grundprinciper: En kö fungerar som en kö. Man

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-10-30 Repetition Analys av tidskomplexitet. Kostnadsmodeller. Asymptotisk komplexitet/notation. Dynamiska arrayer. Amorterad tidskomplexitet

Läs mer

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar Föreläsning 1 Innehåll ADT Prioritetskö Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util ar Implementering av prioritetskö med heap Sortering med hjälp

Läs mer

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt

Läs mer

Föreläsning 11 Innehåll

Föreläsning 11 Innehåll Föreläsning 11 Innehåll Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Datavetenskap (LTH)

Läs mer

Länkade strukturer, parametriserade typer och undantag

Länkade strukturer, parametriserade typer och undantag Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer

Läs mer

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

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal) Föreläsning 0 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map ijava Undervisningsmoment:

Läs mer

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar Föreläsning 1 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Heapar Implementering av prioritetskö med heap Sortering med hjälp av heap

Läs mer

Diskutera. Hashfunktion

Diskutera. Hashfunktion Föreläsning 1 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Tidigare har

Läs mer

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd Föreläsning Innehåll Diskutera Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2014 03 10, 8.00 13.00 Anvisningar: Denna tentamen består av 5 uppgifter. Preliminärt

Läs mer

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll Föreläsning 10 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2 Övning vecka 6. TDA550 - Objektorienterad programvaruutveckling IT, fk Denna vecka ska vi titta på undantag, testning, generiska enheter, samlingar och designmönstret Iterator. Uppgift 1 Exceptions a)

Läs mer

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition Föreläsning Innehåll Diskutera Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Kort om javadoc Abstrakta datatyper Ordböcker/Mappar Listor Stackar

Läs mer

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:

Läs mer

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037) Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 6 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 1

Läs mer

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna Föreläsning Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Klassen PriorityQueue i java.util Implementering med lista ar Implementering av prioritetskö med heap Sortering

Läs mer

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9 Listor Koffman & Wolfgang kapitel 2, avsnitt 2.1 2.3, 2.5 2.6 och 2.9 Figur 2.1, sid 63 java.util.list, med dess implementeringar 2 List och primitiva typer En array kan innehålla primitiva typer: int[],

Läs mer

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

Föreläsning 10. ADT:er och datastrukturer Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll Mera om generik Begreppet subtyp/supertyp i Java Innehåll Wildcards Vektorer och generik Supertyper för en viss klass C är alla klasser från vilka C ärver och alla interface som klassen implementerar.

Läs mer

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Metoden clone() Skapa kopior av existerande objekt. Interface Cloneable Deep vs.

Läs mer

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

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

Föreläsning 11. ADT:er och datastrukturer Föreläsning 11 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Inlämningsuppgift och handledning

Inlämningsuppgift och handledning Inlämningsuppgift och handledning Inlämningsuppgiften redovisas i vecka 49/50. Hög tid att komma igång! Jourtider varje vecka (se http://cs.lth.se/edaa01ht/inlaemningsuppgift) Frågestunder på fredagluncher

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2007-03-13 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller Inlämningsuppgift och handledning Föreläsning 11 Innehåll Inlämningsuppgiften redovisas i vecka 49/50. Hög tid att komma igång! Jourtider varje vecka (se http://cs.lth.se/edaa01ht/inlaemningsuppgift) Frågestunder

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Prioritetsköer och heapar Prioritetsköer och heapar ADT prioritetskö Heapar Implementering av prioritetskö med heap Klassen PriorityQueue i java.util Programexempel LPT-algoritmen

Läs mer

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 interface, motivation och bakgrund Antag att vi gör en generell listklass: public class List { protected static class ListNode { public

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

Sammansatta datatyper Generics: Parametrisk polymorfism

Sammansatta datatyper Generics: Parametrisk polymorfism jonas.kvarnstrom@liu.se 2017 Sammansatta datatyper Generics: Parametrisk polymorfism Listor och arrayer 2 Enligt TDDD73: Många språk har både listor och arrayer även Java och Python! Exakta definitioner

Läs mer

Föreläsning 12. Länkade listor

Föreläsning 12. Länkade listor Föreläsning 12 Länkade listor Jämför en array med en länkad lista m in n e t Array (med 5 element): + effektiv vid hämtning - ineffektiv vid insättning och borttagning Länkad lista (med 5 element): + effektiv

Läs mer

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper. Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något

Läs mer

EDAA01 Programmeringsteknik - fördjupningskurs

EDAA01 Programmeringsteknik - fördjupningskurs EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa01ht Förkunskapskrav: Godkänd på de obligatoriska momenten i EDAA45 Programmering,

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

Mål Förklaring av termer

Mål Förklaring av termer Föreläsning 1 Innehåll Detta kan du Förkunskaper Introduktion Kursens mål och innehåll Undervisning Arv, abstrakta klasser och metoder (repetition) Abstrakta datatyper - lista, stack, FIFO-kö, mängd, map,

Läs mer

Seminarium 13 Innehåll

Seminarium 13 Innehåll Seminarium 13 Innehåll Prioritetsköer och heapar Prioritetsköer ADTn Klassen PriorityQueue i java.util Implementering med lista Heapar ADTn För implementering av prioritetskö För sortering Efter seminariet

Läs mer

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037) Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-07 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra

Läs mer

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } } Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)

Läs mer

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande

Läs mer

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

Saker du ska kunna Föreläsning 13 & 14 Saker du ska kunna Föreläsning 13 & 14 LISTOR Ta bort element från en vektor Både sorterad och osorterad Söka upp element i en vektor Linjärsökning räcker (jag har även visat binärsökning) Registrering

Läs mer

Mål Förklaring av termer

Mål Förklaring av termer Föreläsning 1 Innehåll Detta kan du Förkunskaper Introduktion Kursens mål och innehåll Undervisning Abstrakta datatyper och delar av Javas klassbibliotek Arv, abstrakta klasser och metoder (repetition)

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Objektorienterad programmering med Java, Generics

Objektorienterad programmering med Java, Generics Generics i Java Generic: allmän, genersisk. På menyn på en asiatisk restaurang: Denna rätt serveras med valfritt kött, fisk eller skalddjur Bakgrund Generics i Java ger oss att skriva kod, klasser och

Läs mer

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

Programmering för språkteknologer II, HT2014. Rum Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ 1 Idag - Parametriserade

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(3) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2017 08 14, 8.00 13.00 Anvisningar: Denna tentamen består av 5 uppgifter. Preliminärt

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

Föreläsning 1-2. Språkkonstruktioner i Java. Introduktion till delar av Javas klassbibliotek

Föreläsning 1-2. Språkkonstruktioner i Java. Introduktion till delar av Javas klassbibliotek Föreläsning 1-2 Innehåll Språkkonstruktioner i Java Interface Exceptions Introduktion till generik Autoboxing - och unboxing Introduktion till delar av Javas klassbibliotek Java Collections Framework interface

Läs mer

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011) Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation

Läs mer