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

Relevanta dokument
Tommy Färnqvist, IDA, Linköpings universitet

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

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

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning Datastrukturer (DAT036)

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

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

Föreläsning 2 Datastrukturer (DAT037)

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

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 3 Datastrukturer (DAT037)

Länkade strukturer. (del 2)

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

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

Datastrukturer och algoritmer

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

Länkade strukturer, parametriserade typer och undantag

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 3. Stack

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Magnus Nielsen, IDA, Linköpings universitet

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 3. Stack

Stackar, köer, iteratorer och paket

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

Föreläsning 6: Introduktion av listor

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Abstrakta datastrukturer

Föreläsning 8 Datastrukturer (DAT037)

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 4 Innehåll

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

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. Laboration 2 Datastrukturer En liten uppgift Frågor

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

Tentamen Datastrukturer (DAT036)

Föreläsning 5. Rekursion

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 8 Datastrukturer (DAT037)

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

Tommy Färnqvist, IDA, Linköpings universitet

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

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

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

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

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Tentamen i Algoritmer & Datastrukturer i Java

Några svar till TDDC70/91 Datastrukturer och algoritmer

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

Föreläsning Datastrukturer (DAT037)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Programmering II (ID1019) :00-12:00

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

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

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

Föreläsning Datastrukturer (DAT036)

Vad har vi pratat om i kursen?

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

TDDC30 Programmering i Java, datastrukturer och algoritmer

Dugga Datastrukturer (DAT036)

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 5. Rekursion

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

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

Tentamen Datastrukturer (DAT037)

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

Rekursion och induktion för algoritmkonstruktion

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Föreläsning 7. Träd och binära sökträd

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

DD1361 Programmeringsparadigm. Carina Edlund

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

Föreläsning 14 Innehåll

Föreläsning Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Kurskod D0010E Datum Skrivtid 5tim

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

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

Föreläsning 5 Datastrukturer (DAT037)

Tentamen TEN1 HI

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

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

Tentamen TEN1 HI

Lösningsförslag till exempeltenta 2

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

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Transkript:

öreläsning 2 Stackar, köer och listor TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 6 september 2018 Magnus Nielsen, IDA, Linköpings universitet x 21 Introduktion Sekvenser av data förekommer i många applikationer; Hur representera dem i minnet? Vad är typiska och specifika operationer? (definiera ADTer) Hur implementera dem? Innehåll 22 23 1 ADT stack ADT stack (sist in först ut) Operationer: Top(S) returnerar det översta elementet i stack S 1 Pop(S) tar bort och returnerar det översta elementet i stack S 1 Push(S,x) lägger x överst i stack S MakeEmptyStack() skapar en ny tom stack IsEmptyStack(S) returnerar true omm S är tom 24 11 Tillämpningar Typiska användningsområden för ADT stack Tallrikar som ska diskas Verifiera korrekthet av parentesnästling (tex validering av XML-taggar) Undo-sekvens i texteditor akåtknapp i webbläsare 1 eller ett felmeddelande om S är tom 1

25 Användning av stack: funktionsanrop i JVM Javatolken (Java virtual machine (JVM)) håller reda på en anropskedja med hjälp av en stack När en metod anropas push:ar JVM argumenten, lokala variabler, returvärde och programräknaren (dessa bildar funktionens aktiveringspost) När metoden körts klart pop:as aktiveringsposten och kontrollen lämnas över till metoden överst på stacken Detta möjliggör rekursion main() { int i = 5; foo(i); } foo(int j) { int k; k = j+1; bar(k); } bar(int m) { } bar PC = 1 m=6 foo PC = 3 j=5 k=6 main PC = 2 i=5 26 Svansrekursion Ett rekursivt anrop är svansrekursivt omm första instruktionen efter att kontrollflödet kommit tillbaka efter anropet är return stacken behövs inte: allting på stacken kan kastas direkt svansrekursiva funktioner kan skrivas om till iterativa funktioner Det rekursiva anropet i ACT är inte svansrekursivt: function ACT(n) if n = 0 then return 1 else return n ACT(n 1) örsta instruktionen efter retur från det rekursiva anropet är multiplikation måste behållas på stacken 2 n 27

En svansrekursiv funktion function INSEARCH(v[a,, b],x) if a < b then m a+b 2 if v[m]key < x then return INSEARCH(v[m + 1,,b],x) else return INSEARCH(v[a,,m],x) if v[a]key = x then return a else return not found De två rekursiva anropen är svansrekursiva 28 12 Representation i angränsande minne Implementation av stack i angränsande minne x k S x 0 x 0 k x 0 n-1 S A Length n Length(S) = k + 1 <= n function MAKEEMPTYSTACK S NEW(StackTableHead) SA NEW(table[0,,n 1]) SLength 0 return S function PUSH(S, x) if Slength = n then error else SA[SLength] x SLength SLength + 1 function POP(S) if SLength = 0 then error else SLength SLength 1 return SA[SLength] 29 Implementation av stack i angränsande minne function TOP(S) if SLength = 0 then error else return SA[SLength-1] function ISEMPTYSTACK(S) return SLength = 0 Alla operationer tar O(1) tid 210 3

13 Representation i länkat minne Implementation av stack i länkat minne function M AKE E MPTY S TACK S N EW(StackListHead) Sptop null return S function P USH(S, x) y N EW(StackListItem) yin f o x ynext Sptop Sptop y + maxstorlek behöver inte vara känd i förväg - anrop till N EW vid varje P USH-operation och till REE vid varje P OP-operation x2 Info Next S x1 Info Next x0 Info Next ptop function P OP(S) if Sptop = null then error else y Sptop x yin f o Sptop ynext REE(y) return x 2 211 ADT kö ADT kö (först in först ut) Operationer: ront(q) returnerar det första elementet i kön Q Dequeue(Q) tar bort och returnerar det första elementet i kön Q Enqueue(Q, x) lägger x sist i kön Q MakeEmptyQueue() skapar en ny tom kö IsEmptyQueue(Q) returnerar true omm Q är tom 212 Typiska användningsområden för ADT kö ekanta applikationer Spellista i Spotify Databuffert (ipod, VOD) Asynkron dataöverföring (fil-i/o, pipes, sockets) Ta hand om förfrågningar till delad resurs (skrivare, processor) Labbar som ska rättas Simulering Trafikanalys Väntetider hos en kundtjänst estämma hur många kassörer/kassörskor som behövs på en stormarknad 213 4

21 Representation i angränsande minne Implementation av kö i ringbuffer/cirkulär array x 2 x 3 x 0 x 1 0 n-1 S A ack ront Length = k < n+1 ack = index för första lediga cell ront = index för första elementet Length eller Size för att kontrollera overflow: Size = (n + ) mod n 214 Exempel: operationer på kö implementerad med ringbuffer Enqueue(a) a Enqueue(b) a b Dequeue b Enqueue(c) b c Dequeue c Enqueue(d) d c Dequeue d Dequeue 215 22 Representation i länkat minne Implementation av kö i länkat minne x 0 x 1 x 2 Info Next Info Next Info Next Q pront pack Javakod för köoperationerna: se kursboken, kapitel 523 + maximal storlek behöver inte vara känd i förväg + pekaren pack gör att EnQueue går i tid O(1)(utan pack: hela listan måste traverseras behöver Θ(k) tid) - extra minneshantering i EnQueue och DeQueue 216 3 Listor Listor En lista L är en sekvens av element x 0,,x n 1 size eller length L = n 5

tom lista med längd 0 Urval med index i (ibland med rank): väljer det i:te elementet, x i, där 0 i n 1 Urval med aktuell position, tex första elementet i L, eller sista, föregående, nästa, position abstraherar bort från indexering ADT arraylista: använder index ADT nodlista: använder position 217 31 ADT arraylista ADT arraylista Domän: listor Operationer på en vektor S size() returnerar S isempty() returnerar true omm S = 0 elematindex(i) returnerar S[i]; fel om i < 0 eller i >size() 1 setatindex(i,x) returnera elementet med index i och ersätt det med x som nytt element med index i; fel om i < 0 eller i >size() 1 insertatindex(i,x) sätter in x som nytt element med index i: ökar storleken; fel om i < 0 eller i >size() removeatindex(i) tar bort och returnerar det i:te elementet i S: minskar storleken; fel om i < 0 eller i >size() 1 218 Exempel: några operationer på en initialt tom arraylista S operation utdata S insertatindex(0,7) - (7) insertatindex(0,4) - (4,7) elematindex(1) 7 (4,7) insertatindex(2,2) - (4,7,2) elematindex(3) error (4,7,2) remove(1) 7 (4,2) insertatindex(1,5) - (4,5,2) insertatindex(1,3) - (4,3,5,2) insertatindex(4,9) - (4,3,5,2,9) elematindex(2) 5 (4,3,5,2,9) setatindex(3,8) 2 (4,3,5,8,9) 219 32 ADT nodlista ADT nodlista Domän: listor Operationer på en lista L, förutom size() och isempty() first() returnerar positionen för första elementet i L; fel om L är tom last() returnerar positionen för sista elementet i L; fel om L är tom prev(p) returnerar positionen för elementet som föregår p i L; fel p är första positionen next(p) returnerar positionen för elementet som följer på p i L; fel om p är sista positionen set(p,x) ersätt elementet i position p med x, returnera elementet som förut fanns i position p insertirst(x) sätt in nytt element x som första elementet i L, returnera positionen för x insertlast(x) sätt in nytt element x som sista elementet i L, returnera positionen för x insertefore(p,x) sätt in nytt element x före position p i L, returnera positionen för x insertafter(p,x) sätt in nytt element x efter position p i L, returnera positionen för x remove(p) ta bort och returnera el i position p från L 220 Exempel: några operationer på en initialt tom nodlista L operation utdata L insertirst(8) - (8) first() p 1 (8) (8) insertafter(p 1,5) - (8,5) next(p 1 ) p 2 (5) (8,5) insertefore(p 2,3) - (8,3,5) prev(p 2 ) p 3 (3) (8,3,5) insertirst(9) - (9,8,3,5) last() p 2 (5) (9,8,3,5) remove(first()) 9 (8,3,5) set(p 3,7) 3 (8,7,5) insertafter(first(),2) - (8,2,7,5) 6

221 Implementation av ADT arraylista, ADT nodlista Representation i angränsande minne för arraylistor: elementen lagras i tabell/array (tex den utökningsbara arrayen från föreläsning 2) elematindex går i O(1) tid; hur blir det med andra operationer? Enkellänkad lista för nodlistor: se nästa slide positioner implementerade som pekare Analysera tidskomplexiteten för operationerna prev, insertefore kräver listtraversering Dubbelllänkad lista för nodlistor: se nedan 222 33 Enkel- och dubbellänkade listor Enkellänkade listor En enkellänkad lista är en konkret datastruktur bestående av en sekvens av noder Varje nod lagrar element pekare till nästa nod next elem node A C D 223 Dubbellänkade listor En dubbelänkad lista ger en naturlig implementation av ADTn nodlista Varje nod lagrar element pekare till föregående nod pekare till nästa nod Särskilda huvud- och svansnoder prev next elem node huvud noder/positioner svans element 224 7

Insättning i dubbellänkade listor A C p A q C p q X A X C 225 orttagning i dubbellänkade listor p A C D A C p D A C 226 8