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

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

Föreläsning 4 Innehåll

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning 3-4 Innehåll

Föreläsning 3. Stack

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

Länkade strukturer. (del 2)

Föreläsning 3. Stack

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

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 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ö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Seminarium 13 Innehåll

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 13 Innehåll

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

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 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Tentamen i Algoritmer & Datastrukturer i Java

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

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 2 Datastrukturer (DAT037)

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö

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

Föreläsning 3 Datastrukturer (DAT037)

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 3 Innehåll

Diskutera Sortera objekt

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

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 14 Innehåll

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

Stackar, köer, iteratorer och paket

Tentamen i Algoritmer & Datastrukturer i Java

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

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

Föreläsning Datastrukturer (DAT036)

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

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

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

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

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

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

Länkade listor, stackar och köer

Mål Förklaring av termer

Mål Förklaring av termer

Datastrukturer och algoritmer

Tentamen i Algoritmer & Datastrukturer i Java

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

Lösningsförslag till exempeltenta 2

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

Abstrakta datastrukturer

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

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

Interfacen Set och Map, hashtabeller

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

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

Tentamen Datastrukturer (DAT036)

Länkade strukturer, parametriserade typer och undantag

Föreläsning 9 Innehåll

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

Föreläsning 4 Datastrukturer (DAT037)

Exempeltenta GruDat 2002/2003

Föreläsning 10 Innehåll

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

Tentamen kl Uppgift 4. Uppgift 5

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen i Algoritmer & Datastrukturer i Java

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

Kurskod D0010E Datum Skrivtid 5tim

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

13 Prioritetsköer, heapar

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Föreläsning 12. Länkade listor

Programmering fortsättningskurs

Diskutera. Hashfunktion

Tentamen Datastrukturer (DAT036)

Föreläsning 13. Träd

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

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 9 Innehåll

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret Lektion 3

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: Objektorienterad programutveckling. Läs detta! Skriv ditt namn och personnummer på varje blad (så att vi inte slarvar bort dem).

Inlämningsuppgift och handledning

Transkript:

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 Implementering av köer och stackar Med delegation till intern listklass från JCF Med en enklare datastruktur Efter seminariet ska ni kunna lösa övningsuppgifterna t.o.m. kapitel 5 i övningshäftet. ADT Kö Definition En 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. poll FIFO-kö (underförstått när vi pratar om köer) offer FK (Seminarium 4 Köer och Stackar) HT 06 / PFK (Seminarium 4 Köer och Stackar) HT 06 / Operationer ADT Stack Definition En stack är en följd av element där borttagning av ett element alltid avser det element som senast satts in. Sätt in x sist i kön (offer, enqueue) Ta reda på första elementet i kön (peek) Ta reda på och tar bort första elementet i kön (poll, dequeue) Kallas även LIFO-kö, Last In First Out FK (Seminarium 4 Köer och Stackar) HT 06 / PFK (Seminarium 4 Köer och Stackar) HT 06 4 /

ADT Stack Exempel på användning av stack En stack beskrivs oftast lodrätt orienterad. Operationer sker på toppen av stacken. 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. push pop Operatorn placeras efter sina två operander: 0 Ex: 0 * i postfix notation motsvarar uttrycket * (0 ) 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. FK (Seminarium 4 Köer och Stackar) HT 06 5 / Exempel på användning av stack Algoritm PFK (Seminarium 4 Köer och Stackar) HT 06 6 / Exempel på användning av stack Evaluering av uttrycket: 0 * 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 t och t // st. pop från stacken res = resultatet av operatorn använd på t och t lägg res på stacken // push Nu ska stacken bara innehålla ett värde resultatet. Läst: inget 0 - * 0 0 - Stack: tom -6 Om uttrycket är korrekt så ligger till sist resultatet som enda element på stacken. FK (Seminarium 4 Köer och Stackar) HT 06 7 / PFK (Seminarium 4 Köer och Stackar) HT 06 8 /

Kö och Stack i java.util ADT Stack i java.util «Interface» Collection «Interface» «Interface» List Queue Stack LinkedList PriorityQueue 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. lägg ett element överst på stacken push(e) tag bort och returnera översta elementet pop() returnera översta elementet peek() Den innehåller också många metoder som inte förväntas av en stack. Klassen LinkedList i java.util innehåller även 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() FK (Seminarium 4 Köer och Stackar) HT 06 9 / Interface Stack som det borde se ut PFK (Seminarium 4 Köer och Stackar) HT 06 0 / Implementering av kö och stack Alternativ 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(); Gör inte någon ny implementering utan utnyttja en list-klass (t ex java.util.linkedlist) men använd bara de operationer som är tillåtna för kö. + enkelt övriga metoder finns fortfarande tillgängliga /** Returnerar översta elementet på stacken. */ E peek(); /** Undersöker om stacken är tom. */ boolean isempty(); Implementera en egen klass, men använd internt en annan list-klass (delegation). Implementera en egen klass med en enklare datastruktur (t ex vektor eller enkellänkad lista). FK (Seminarium 4 Köer och Stackar) HT 06 / PFK (Seminarium 4 Köer och Stackar) HT 06 /

Implementering av stack genom delegation till lista public class MyStack<E> { private LinkedList<E> elements;... public push(e x) { elements.push(x); Implementering av kö 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 public E peek() { return elements.peek();... 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 FK (Seminarium 4 Köer och Stackar) HT 06 / PFK (Seminarium 4 Köer och Stackar) HT 06 4 / Enkellänkad implementering av stack Enkellänkad implementering av kö s = new MyStack<Integer>(); first = null s.push(); first q = new MyQueue<Integer>(); first = = null q.offer(); first s.push(); first q.offer(); first s.push(); int i = s.pop() // i får värdet first first q.offer(); int i = q.poll() // i får värdet first first FK (Seminarium 4 Köer och Stackar) HT 06 5 / PFK (Seminarium 4 Köer och Stackar) HT 06 6 /

Implementering av stack Jämförelse mellan alternativ och Vektorimplementering av stack Föregående alternativ (delegering till LinkedList): Många metodanrop. Om vi anropar push i Stack, så anropas också push i LinkedList,... Datastrukturen i LinkedList är vald så att operationerna på listan ska bli effektiva. (I java.util med en dubbellänkad lista). Implementering med enklare datastruktur: Det blir färre metodanrop. T ex utför då push sin uppgift utan att delegera vidare till annan metod. En enkellänkad struktur kan ge bättre effektivitet. Vektorimplementering av stack: Stacken representeras av vektor och index för nästa insättning (initialt 0). Ger konstant tid för operationerna så länge vektorns storlek räcker. Om man dubblar vektorns storlek varje gång den inte räcker till, kan man visa att operationerna fortfarande i medeltal går att utföra på konstant tid. Efter dubblering är bara halva utrymmet i vektorn utnyttjat. FK (Seminarium 4 Köer och Stackar) HT 06 7 / PFK (Seminarium 4 Köer och Stackar) HT 06 8 / Vektorimplementering av stack Vektorimplementering av kö s = new MyStack<Integer>(); size = 0 s.push(); s.push(); s.push() int i = s.pop() // i får värdet size = size = 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 + index för första ( äldsta ) elementet + index för sista ( yngsta ) elementet + antalet element. Även här kan vi behöva skapa större vektor när antalet element blivit för stort. size = s.push(4); 4 size = FK (Seminarium 4 Köer och Stackar) HT 06 9 / PFK (Seminarium 4 Köer och Stackar) HT 06 0 /

Vektorimplementering av kö Interface Queue i java.util q = new MyQueue<Integer>(); q.offer(); q.offer(); q.offer(); q.offer(4); q.offer(5); int i = q.poll() // i får värdet q.offer(6); front = 0, rear = 4, size = 0 front = 0, rear = 0, size = 4 5 front = 0, rear = 4, size = 5 4 5 front =, rear = 4, size = 4 6 4 5 front =, rear = 0, size = 5 Innehåller allt som en kö kräver Innehåller dessutom bl.a. boolean add(e x) E element() E remove() <<Interface>> Collection <<Interface>> Queue Genererar exception Returnerar speciellt värde Sätta in boolean add(e e) boolean offer(e e) Ta bort E remove() E poll() Ta reda på E element() E peek() FK (Seminarium 4 Köer och Stackar) HT 06 / Implementeringar av Interface Queue i java.util PFK (Seminarium 4 Köer och Stackar) HT 06 / Det finns flera implementeringar av interfacet Queue i Java, två av dem stöter vi på i den här kursen. LinkedList FIFO - kö add(e e) och offer(e e) lägger till element sist i listan remove() och poll() tar bort och returnerar första elementet i listan element() och peek() tittar på första elementet i listan PriorityQueue Elementen plockas ut i prioritetsordning Mer om detta längre fram i kursen LinkedList <<Interface>> Queue PriorityQueue FK (Seminarium 4 Köer och Stackar) HT 06 /