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

Relevanta dokument
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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 3. Stacks 1

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Lösningsförslag till exempeltenta 2

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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

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

Länkade strukturer. (del 2)

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

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

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

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

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 12. Länkade listor

Föreläsning 3. Stack

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Föreläsning 3. Stack

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 2 Datastrukturer (DAT037)

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Stackar, köer, iteratorer och paket

Konstruktion av klasser med klasser

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

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

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 4 Innehåll

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

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

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

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Länkade listor, stackar och köer

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Länkade strukturer, parametriserade typer och undantag

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

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

Kurskod D0010E Datum Skrivtid 5tim

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

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

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

DAT043 Objektorienterad Programmering

Lösningar för tenta 2 DAT043,

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Föreläsning 4 Datastrukturer (DAT037)

Objektorienterad Programmering (TDDC77)

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

Abstrakta datatyper Laboration 2 GruDat, DD1344

Generiska konstruktioner. Kursbokens kapitel 13

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

OOP Objekt-orienterad programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad programmering i Java

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Tentamen. Lösningsförslag

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 1 Datastrukturer (DAT037)

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Transkript:

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 data utan att behöva tänka på hur operationerna ska implementeras (dvs hur programkoden ska se ut). En datastruktur som beskrivs på detta sätt kallas för en abstrakt datatyp. En abstrakt datatyp Anger inte lagringssättet Specificerar operationer för åtkomst och ändring Stack En stack fungerar som en trave tallrikar - det man lägger överst på stacken är det som kommer att tas bort först. För en abstrakt stack finns följande operationer: push(x) x=pop() IsEmpty() Lägg x överst på stacken. Hämta det som ligger överst på stacken. Undersök om stacken är tom. Den som använder datatypen behöver inte (och får inte heller) bry sig om hur den representeras. I Java definierar man lämpligen först ett gränssnitt (interface) för den abstrakta datatypen. Implementationen blir sedan en klass som implementerar gränssnittet och där alla instansvariabler är privata. Så här skulle ett gränssnitt för en stack kunna se ut: interface Stack { void push(object x); Object pop(); boolean isempty(); Skriv programmet LadiesFirst.java som läser en fil av typen med personnummer och namn och först skriver ut alla kvinnor och sedan alla män i filen. 120203-1114 Albus Dumbledore 330401-6402 Minerva McGonagall 920731-3131 Harry Potter

Männen måste tillfälligt läggas i ett förvaringsutrymme medan filen läses igenom. Man skulle kunna använda en vektor String[] om man visste att det fanns högst hundra män, men vi ska i stället använda en abstrakt stack. Man lägger en textrad på stacken med anropet stack.push("en textrad") och man hämtar en textrad från stacken med raden=stack.pop(). Med koden if (stack.isempty())... ska man kunna kolla om stacken är tom. import java.io.*; class LadiesFirst { public static void main(string[] args) { String filnamn = args[0]; String personrad; BufferedInputStream infil = Mio.openRead(filnamn); Stack stack = new TildaStack(); while (!Mio.eof(infil)) { personrad = Mio.getLine(infil); int nästsistasiffran = personrad.charat(9) 0 ; if (nästsistasiffran % 2 == 0) System.out.println("Kvinna: " + personrad); stack.push(personrad); while (!stack.isempty()) { personrad = (String) stack.pop(); System.out.println("Man: " + personrad); //main() //Ladiesfirst Här har vi programmerat abstrakt, som om push och pop vore fungerande metoder. Stackimplementationen kommer lite senare! Kö En kö fungerar som man förväntar sig, dvs det man stoppar in först är det som tas ut först. För en abstrakt kö finns följande operationer: enqueue(x) X=dequeue() IsEmpty() Stoppa in x sist i kön. Hämta det som står först i kön. Undersök om kön är tom. En kö kan t ex användas för att hantera skrivarköer. Den som skrev ut först ska också få ut sin utskrift först. I labb 2 ska ni använda en kö för att förbereda en kortkonst! Länkade listor En länkad lista består av ett antal objekt, noder som är sammanlänkade genom att varje nod refererar till nästa nod. Dessa referenser kallas ofta next-pekare. Klassen Node skulle kunna användas för att skapa en länkad lista med heltal.

class Node{ int info; Node next; //Node Stack Här kommer nu klassen TildaStack, en stack implementerad med en länkad lista. Stacken kan också implementeras på andra sätt, t ex med en array (Javas Stack är implementerad med en Vector). class TildaStack implements Stack { //TildaStack() public void push(int n){ Node nynod = new Node(); nynod.info = n; //push() public int pop(){ int n = top.info; return n; //pop() //isempty() //TildaStack Datadelen info skulle kunna vara String men en generellare stack får man genom att använda Object. Ersätt int med Object överallt. Det kan vara praktiskt med en konstruktor i Node också och då blir det så här. class Node{ Object info; Node next; public Node(Object info){ this.info = info; this.next = null;

class TildaStack implements Stack {//stack som lagrar objekt public void push(object info){ Node nynod = new Node(info); public Object pop(){ Object info = top.info; return info; //TildaStack Kö En kö kan implementeras som länkad lista med samma noder men med en pekare även på sista noden. Där ska nämligen nya noder stoppas in. class Queue {//kö som lagrar objekt private Node head, tail; public Queue(){ head = null; tail = null; public void enqueue(object info){ Node nynod = new Node(info); if (isempty()) head = nynod; tail.next = nynod; tail = nynod; public Object dequeue() {/* samma som pop för en stack*/ public boolean isempty() {/* samma som för en stack */

class LadiesFirst { public static void main(string[] args) { String filnamn = args[0]; String personrad; BufferedInputStream infil = Mio.openRead(filnamn); Stack stack = new TildaStack(); while (!Mio.EOF(infil)) { personrad = Mio.getLine(infil); int nästsistasiffran = personrad.charat(9) 0 ; if (nästsistasiffran % 2 == 0) System.out.println("Kvinna: " + personrad); stack.push(personrad); while (!stack.isempty()) { personrad = (String) stack.pop(); System.out.println("Man: " + personrad); interface Stack { void push(object x); Object pop(); boolean isempty(); class TildaStack implements Stack { //TildaStack() public void push(int n){ Node nynod = new Node(); nynod.info = n; //push() public int pop(){ int n = top.info; return n; //pop() //isempty()