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

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

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

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

Föreläsning 2 Datastrukturer (DAT037)

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 4 Innehåll

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

Länkade strukturer. (del 2)

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

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

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

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

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

Datastrukturer. föreläsning 3. Stacks 1

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

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

Föreläsning 3 Datastrukturer (DAT037)

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3 Datastrukturer (DAT037)

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning Datastrukturer (DAT036)

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

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

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

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

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

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

Föreläsning 2. Stackar, köer och listor TDDC91,TDDE22,725G97: DALG. Innehåll. 1 ADT stack. 1.1 Tillämpningar

Stackar, köer, iteratorer och paket

Länkade strukturer, parametriserade typer och undantag

Tommy Färnqvist, IDA, Linköpings universitet

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

Föreläsning 14 Innehåll

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

Föreläsning 3. Stack

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

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Tommy Färnqvist, IDA, Linköpings universitet

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

Objektorienterad Programkonstruktion

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

Abstrakta datastrukturer

Arrayer. results

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

Föreläsning 1 Datastrukturer (DAT037)

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

Datastrukturer och algoritmer

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Laboration A Objektsamlingar

Datastrukturer och algoritmer

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

Den som bara har en hammare tror att alla problem är spikar

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Föreläsning 2 Datastrukturer (DAT037)

TDDC77 Objektorienterad Programmering

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

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

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Sammansatta datatyper Generics: Parametrisk polymorfism

Datastrukturer och algoritmer

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

Samlingar Collection classes

OOP Objekt-orienterad programmering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

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

Tentamen Datastrukturer (DAT036)

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Abstrakta datatyper Laboration 2 GruDat, DD1344

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Objektorienterad programmering

Tentamen Datastrukturer (DAT037)

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Kurskod D0010E Datum Skrivtid 5tim

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

Föreläsning Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Objektorienterad programmering i Java

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Tentamen i Algoritmer & Datastrukturer i Java

Repetition av OOP- och Javabegrepp

Transkript:

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 Köer 1

Abstrakta Datatyper (ADT) Abstraktion (subst.) En tankeprocess i vilken man bortser från vissa egenskaper hos en företeelse eller ett föremål och i stället uppmärksammar en eller några få egenskaper Källa: Nationalencyklopedin (förkortad form) Abstrakt datatyp En datatyp där man bortser från implementationsspecifika egenskaper och istället uppmärksammar en eller några få egenskaper. ADT implementeras med lämpliga datastrukturer och algoritmer Datastruktur - Logisk organisation av datorminne för lagring av data Algoritm En uppsättning instruktioner för att lösa en uppgift 2

Abstrakta Datatyper (ADT)(2) Flyttal: Ett oväntat exempel på en abstrakt datatyp(adt) Vi behöver ej känna till exakt hur flyttalet fungerar internt i datorn Detaljer kan variera mellan programspråk Formatet är rätt komplext, ex. Java definierar en float med formeln s c 2 q, där s är -1/1, c 23 bit och q 8 bit Allt vi behöver veta är operationerna, +, -, *, /, osv. Vi förväntar oss samma uppsättning operationer på flyttal överallt Endast flyttals-kontraktet måste följas Kod som använder flyttal blir därmed frikopplad från specifik implementation 3

Abstrakta Datatyper (ADT)(3) Scenario: Du skriver ett program som hanterar samtliga studenter godkända på en kurs. Programmet ska spara för varje student om de klarat av kursen eller ej. Behov: En abstrakt datatyp(adt) som kan hjälpa till med ovannämda Steg 1: Planera en lämplig abstrakt datatyp Bestäm både både domän och operationer Steg 2: Implementera ADT:n som en datastruktur Välj representation för datat Skriv algoritmer för ADT:ns operationer Steg 3: Använd ADT:ns operationer för att beskriva algoritmen som löser ditt problem 4

Abstrakta Datatyper (ADT)(4) Steg 1: Välj lämplig abstrakt datatyp Både domän och operationer ADT: Ordbok (nyckel-information par) Domän: En linjärt ordnad mängd nycklar K (studenter) Information I (ja eller nej) Operationer: lookup(nyckel) => information Ev. insättningsoperation? Fler detaljer än dessa inte synliga för användaren 5

Abstrakta Datatyper (ADT)(5) Steg 2: Implementera ADT:n som en datastruktur Välj representation av datat Konstruera algoritmer för operationerna MyDictionaryImpl - pnrs : Strings[] - passed : boolean[] +lookup(pnr : String) : boolean Steg 3: Använd ADT:ns operationer för att lösa din uppgift MyDictionaryImpl students = new MyDictionaryImpl(); students.lookup( 880725-9505 ); 6

Abstrakta Datatyper (ADT)(5) Men om vi vill ändra implementation senare? Hur gör vi för att det inte skall bli fel på alla ställen där vi använder typen MyDictionaryImpl? Dictionary +lookup(pnr : String) : boolean MyDictionaryImpl - pnrs : Strings[] - passed : boolean[] +lookup(pnr : String) : boolean OtherDictionaryImpl - pnr : Strings - passed : boolean - next : OtherDictionaryImpl +lookup(pnr : String) : boolean Vi låter omvärlden använda datastrukturen genom en abstrakt klass, och polymorfi! Dictionary students = new MyDictionaryImpl(); // nu behöver vi endast ändra här students.lookup( 880725-9505 ); 7

Abstrakta Datatyper (ADT)(5) Sammanfattning: ADT:er säger vad som ska göras För att bestämma hur det ska göras Välj datastruktur Konstruera algoritmer för ADT:ns operationer Samma ADT kan implementeras med Olika datastrukturer Olika algoritmer MyDictionaryImpl - pnrs : Strings[] - passed : boolean[] +lookup(pnr : String) : boolean Dictionary +lookup(pnr : String) : boolean Välj den lösning som är mest effektiv i just ditt fall OtherDictionaryIm +lookup(pnr : String) : boo - pnr : Strings - passed : boolean - next : OtherDictiona 8

ADT Lista En av de mest använda abstrakta datatyperna Numrerad Går att hämta element m.h.a. index Går att använda Iteratorer för att traversera Abstraherar bort indexering (om man vill) Storleken: Antal element lagrade i listan Kan implementeras både med array eller länkade noder 9

ADT Lista(2) En delmängd av standardgränssnittet för ADT Lista: void add(x) Lägg till x i slutet av listan void addfirst(x) Lägg till x i början av listan void remove(x), remove(i) Ta bort x /elementet på plats i boolean contains(x) True om det finns ett likadant element int indexof(x) Returnerar index för x x get(i) Returnerar elementet på index i 10

ArrayList En implementation av ADT:n Lista Representerar datat i någon form av fält + Kan hämta ut element med index snabbt - Långsam vid insättning i början av listan... 11

Enkellänkad Lista En implementation av ADT:n Lista Representerar datat i noder med referens till efterföljande nod Har ofta även ett huvud med lite extra information H D D D / + Kan lägga till element i (början av) listan snabbt - Långsam då den hämtar ut element av ett visst index... 12

Lite om referenser Variabler av icke primitiva datatyper är alltid referenser i java. Måste instansieras innan de används. Två variabler kan referera till samma minnesutrymme. Human a = new Human( Kalle ); Human b = a; b.setname( Lisa ); a: b: Lisa Objekt behöver ej destrueras! (avallokeras) 13

Länkad struktur En klass kan innehålla en variabel av samma typ som klassen själv! class Node { String data; Node next; } 14

Dubbellänkad Lista H En implementation av ADT:n Lista Representerar datat i noder med referens till efterföljande och föregående nod Har ofta även ett huvud med lite extra information, ibland dessutom en svans. Så kallade sentinel-noder / D D D / + Snabbare att sortera - Kräver större minnesutrymme... 15

Cirkulärt länkad Lista En implementation av ADT:n Lista Enkellänkade noder i en ring Har ofta även ett huvud / markör för att peka ut den aktuella noden, ibland även en svans M D D D Implementerar vanligtvis även D Används ofta när en ringbuffer behövs D void add(e) Lägger till element efter den aktuella noden E remove() Tar bort noden efter den aktuella noden void advance() Flyttar markören ett steg 16

Iteratorer Harry har skrivit ett program som använder två cirkulära listor, en arraylista samt en dubbellänkad lista. Han vill ha ett gemensamt sätt att besöka alla värden i alla dessa datastrukturer Lösning: Iteratorer! 17

Iteratorer(2) Ett sätt att iterera över alla element i en datastruktur utan att behöva känna till implementationen! Skapas oftast av datastrukturen genom att anropa metoden iterator(). List<String> mylist = SingleLinkedList<String>(); Iterator<String> i = mylist.iterator(); // Kan byta ut mylist mot alla objekt // som kan skapa en iterator while (i.hasnext()) { System.out.print(i.next()); } // Inbyggt snabbsätt att iterera över datastrukturer // Fungerar eftersom mylist har metoden iterator() for (String data : mylist) { System.out.print(data); } 18

Kö (en. Queue) Du är en kock på en restaurang. Servitör / servitris kommer in med beställningar som läggs i kö. När du skall göra en maträtt tar du alltid den beställning som ligger först i kön (den har väntat längst). mmmm. 19

Kö (en. Queue) Först in först ut (FIFO) Metoder front() / peek() Returnerar främsta elementet dequeue() Tar bort och returnerar det främsta elementet void enqueue(e) Lägger till ett element i slutet av kön boolean isempty() Returnerar sant om kön är tom int size() Returnerar antalet element i kön Exempel på användning: Inmatningsbuffert 20

Stack Du är en diskare på en restaurang. Servitör / servitris bär in disk och lägger längst upp på din hög (en stack). Du tar alltid översta tallriken när du skall diska nästa. 21

Stack Sist in först ut (LIFO) Metoder top() / peek() Returnerar stackens toppelement utan att ta bort det pop() Tar bort och returnerar stackens toppelement void push(element) Lägger till ett element på toppen av stacken boolean isempty() Returnerar sant om stacken är tom int size() Returnerar antal element i stacken Obs! Datastrukturen kanske är implementerad precis som en annan ADT, men uppsättningen operationer skiljer. 22

Hitta felet! public class StackTest { public static void main(string[] args) { Stack stack = new Stack(); stack.push(34); int i = stack.pop(); stack.push(i); } } stack.pop(); stack.peek(); stack.pop(); Försäkra dig om att stacken inte är tom innan du försöker komma åt topelementet. (Ett Exception kommer att 23 kastas här!)