Föreläsning 4 Innehåll

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

Föreläsning 3-4 Innehåll

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

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

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

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

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

Föreläsning 3 Datastrukturer (DAT037)

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning Datastrukturer (DAT036)

Föreläsning 2 Innehåll

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

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

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

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

Föreläsning 2 Datastrukturer (DAT037)

Länkade strukturer. (del 2)

Seminarium 3 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.

Stackar, köer, iteratorer och paket

Föreläsning 3 Datastrukturer (DAT037)

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 14 Innehåll

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

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

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. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Tommy Färnqvist, IDA, Linköpings universitet

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

Länkade strukturer, parametriserade typer och undantag

Föreläsning 2 Innehåll

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 10. ADT:er och datastrukturer

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

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

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

Föreläsning 3. Stack

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

Föreläsning 9 Innehåll

Sammansatta datatyper Generics: Parametrisk polymorfism

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning Datastrukturer (DAT036)

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning 13 Innehåll

DAT043 Objektorienterad Programmering

Föreläsning 9 Innehåll

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

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

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

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

Objektsamlingar i Java

Tentamen i Algoritmer & Datastrukturer i Java

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

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

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

Samlingar Collection classes

DAT043 - föreläsning 8

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

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

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Diskutera. Hashfunktion

Tentamen, Algoritmer och datastrukturer

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

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

Generisk klass med typparameter Inre klass - ListIterator

Föreläsning 3 Innehåll

Diskutera Sortera objekt

1 Repetition av viktiga begrepp inom objektorienterad programmering

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

Repetition av OOP- och Javabegrepp

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

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

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

Föreläsning 10 Innehåll

Repetition av OOP- och Javabegrepp

Föreläsning 3. Stack

Föreläsning 11 Innehåll

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Inlämningsuppgift och handledning

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Laboration A Objektsamlingar

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

OOP Objekt-orienterad programmering

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

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

Föreläsning 3-4 Innehåll

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 12. Länkade listor

Transkript:

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 kö med vektor eller enkellänkad lista. Datavetenskap (LTH) Föreläsning 4 VT 2019 1 / 45

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 Datavetenskap (LTH) Föreläsning 4 VT 2019 2 / 45

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... Datavetenskap (LTH) Föreläsning 4 VT 2019 3 / 45

Implementering av listor En vektor kan användas för att hålla reda på listans element. 0 1 2 3 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). Datavetenskap (LTH) Föreläsning 4 VT 2019 4 / 45

Egen implementering av listor från grunden Vektor a size 3 0 1 2 3 4 5 6 7 8 9 objekt som satts in i vektorn Datavetenskap (LTH) Föreläsning 4 VT 2019 5 / 45

Egen implementering av listor från grunden Enkellänkad lista first next element next element next element null objekt som satts in i listan Datavetenskap (LTH) Föreläsning 4 VT 2019 6 / 45

Enkellänkad lista Egen implementering från grunden public class SingleLinkedList<E> { private ListNode<E> first; // referens till första noden // null om listan är tom..metoder.. /* Statisk 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; Datavetenskap (LTH) Föreläsning 4 VT 2019 7 / 45

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: statiska nästlade klasser inre klasser (eng: inner classes). Datavetenskap (LTH) Föreläsning 4 VT 2019 8 / 45

Statiska 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. Datavetenskap (LTH) Föreläsning 4 VT 2019 9 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 10 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 11 / 45

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(...); Datavetenskap (LTH) Föreläsning 4 VT 2019 12 / 45

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(); Datavetenskap (LTH) Föreläsning 4 VT 2019 13 / 45

Inre klass eller statisk nästlad klass i vår listklass? Det fungerar alltid med en inre klass. public class SingleLinkedList<E> {... private class ListNode {... Men varje objekt av den inre klassen har en referens till ett objekt av den omgivande klassen. Dessa referenser tar upp minne. Om man i den nästlade klassen bara behöver använda sådant som är deklarerat static i den omgivande klassen kan man istället ha en statisk nästlad klass. public class SingleLinkedList<E> {... private static class ListNode<E> {... I den statisk nästlade klassen ListNode når vi inte typparametern i den omgivande klassen. ListNode måste därför också ha en typparameter. Datavetenskap (LTH) Föreläsning 4 VT 2019 14 / 45

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; Datavetenskap (LTH) Föreläsning 4 VT 2019 15 / 45

Traversering av elementen i listan Exempel: metoden tostring 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(); Datavetenskap (LTH) Föreläsning 4 VT 2019 16 / 45

Traversering av elementen i listan Mönster ListNode<E> p = first; while (p!= null) {... p = p.next; Datavetenskap (LTH) Föreläsning 4 VT 2019 17 / 45

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? Datavetenskap (LTH) Föreläsning 4 VT 2019 18 / 45

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; Datavetenskap (LTH) Föreläsning 4 VT 2019 19 / 45

Söka upp sista noden i listan Mönster if (first == null) {... else { ListNode<E> p = first; while (p.next!= null) { p = p.next; // Här refererar p till sista noden Datavetenskap (LTH) Föreläsning 4 VT 2019 20 / 45

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; Datavetenskap (LTH) Föreläsning 4 VT 2019 21 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 22 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 23 / 45

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> {... Datavetenskap (LTH) Föreläsning 4 VT 2019 24 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 25 / 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();... Datavetenskap (LTH) Föreläsning 4 VT 2019 26 / 45

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> {...... Datavetenskap (LTH) Föreläsning 4 VT 2019 27 / 45

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) {... Datavetenskap (LTH) Föreläsning 4 VT 2019 28 / 45

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 Datavetenskap (LTH) Föreläsning 4 VT 2019 29 / 45

Listklasser i java.util Implementeringar Nu när vi implementerat en egen listklass kan vi jämföra olika listimplementeringar: ArrayList implementeras med hjälp av en vektor: 0 1 2 3 4 5 6 7 8 9 Inuti LinkedList används en cirkulär, dubbellänkad struktur: Fördelar, nackdelar? Datavetenskap (LTH) Föreläsning 4 VT 2019 30 / 45

Diskutera Kryssa i tabellen vilka metoder som är snabba (konstant tid) respektive långsammare (innehåller loop, beror på antal element i listan). ArrayList: LinkedList: get(i) addfirst(obj) addlast(obj) remove(i) get(i) addfirst(obj) addlast(obj) remove(i) snabb långsammare Datavetenskap (LTH) Föreläsning 4 VT 2019 31 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 32 / 45

Implementera abstrakta datatyperna stack och FIFO-kö Vi har tidigare sett ett exempel hur man kan skriva en stack-klass genom att internt använda LinkedList eller ArrayDeque. Fördelen är att det är enkelt och koden blir kort. Men det bli dubbla metodanrop. Om vi anropar push i vår stackklass, så anropas också push i LinkedList,... En onödigt komplicerad datastruktur används. 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. Istället kan man använda en vektor eller en enkellänkad lista för att implementera de abstrakta datatyperna stack och FIFO-kö. Datavetenskap (LTH) Föreläsning 4 VT 2019 33 / 45

Diskutera Hur kan man använda en enkellänkad lista för att implementera en stack? Hur kan man använda en vektor för att implementera en stack? Datavetenskap (LTH) Föreläsning 4 VT 2019 34 / 45

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 Datavetenskap (LTH) Föreläsning 4 VT 2019 35 / 45

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 3 2 1 int i = s.pop() // i får värdet 3 first 2 1 Datavetenskap (LTH) Föreläsning 4 VT 2019 36 / 45

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. Datavetenskap (LTH) Föreläsning 4 VT 2019 37 / 45

Vektorimplementering av stack s = new MyStack<Integer>(); size = 0 s.push(1); 1 size = 1 s.push(2); s.push(3) 1 2 3 size = 3 int i = s.pop() // i får värdet 3 1 2 3 size = 2 s.push(4); 1 2 4 size = 3 Datavetenskap (LTH) Föreläsning 4 VT 2019 38 / 45

Enkellänkad implementering av FIFO-kö Enkellänkad datastruktur för FIFO-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 Datavetenskap (LTH) Föreläsning 4 VT 2019 39 / 45

Enkellänkad implementering av FIFO-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 1 2 3 last int i = q.poll() // i får värdet 1 first 2 3 last Datavetenskap (LTH) Föreläsning 4 VT 2019 40 / 45

Enkellänkad implementering av FIFO-kö Alternativ Enkellänkad, cikulär datastruktur för FIFO-kö: Kön representeras av referenser till sista noden. Sista noden refererar till första noden. last Datavetenskap (LTH) Föreläsning 4 VT 2019 41 / 45

Vektorimplementering av FIFO-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. Datavetenskap (LTH) Föreläsning 4 VT 2019 42 / 45

Vektorimplementering av FIFO-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); 1 2 3 4 5 front = 0, rear = 4, size = 5 int i = q.poll() // i får värdet 1 1 2 3 4 5 front = 1, rear = 4, size = 4 q.offer(6); 6 2 3 4 5 front = 1, rear = 0, size = 5 Datavetenskap (LTH) Föreläsning 4 VT 2019 43 / 45

Exempel på vad du ska kunna Implementera en lista 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. Med hjälp av dokumentation använda klasser och interface från Java Collections Framework: List, Queue, Deque, ArrayList, LinkedList, ArrayDeque, Iterator, ListIterator och Iterable Implementera en lista, stack eller kö effektivt med hjälp av vektor respektive länkade struktur. Datavetenskap (LTH) Föreläsning 4 VT 2019 44 / 45

Datorlaboration 2 Enkellänkad lista Implementera egna generiska klasser som beskriver en FIFO-kö. I en klass ska du delegera till klassen LinkedList. I den andra klassen 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: 1 2 3 Inuti klassen är den uppbyggd så här: next element next element next element 1 2 3 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. Datavetenskap (LTH) Föreläsning 4 VT 2019 45 / 45