Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Like dokumenter
INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Liste som abstrakt konsept/datatype

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

UNIVERSITETET I OSLO

Grunnleggende Datastrukturer

INF1010. Stein Michael Storleer (michael) Lenkelister

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

INF Notater. Veronika Heimsbakk 10. juni 2012

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Stack. En enkel, lineær datastruktur

UNIVERSITETET I OSLO

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Studieaktiviteter i INF1010

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

Operasjoner på lenkede lister (enkeltlenket) Eksempel på en lenket liste: personliste. INF januar 2010 (uke 3) 2

INF1010 siste begreper før oblig 2

Lenkelister. Lister og køer.

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

Velkommen til INF1010

Dagens forelesning. INF1010 Datastrukturer Lister og køer Pekerkjedelister Øvelser. Innhold i dette lysarksettet

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Lenkelister og beholdere av lenkelister

Versjon (vil bli endret).

INF Seminaroppgaver til uke 3

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

PG4200 Algoritmer og datastrukturer Forelesning 7

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Dagens tema INF1010 INF1010 INF1010 INF1010

INF Innleveringsoppgave 6

Algoritmer og Datastrukturer

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

PG 4200 Algoritmer og datastrukturer Innlevering 2

Definisjon av binært søketre

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Repetisjonskurs om lenkelister og iteratorer

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Datastrukturer for rask søking

Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Lenkelister og beholdere av lenkelister

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Algoritmer og datastrukturer Løsningsforslag

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

Vanlige datastrukturer. I dette lysarksettet

Inf1010 oppgavesamling

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Binære trær: Noen algoritmer og anvendelser

INF1010 våren januar. Objektorientering i Java

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen 22. februar 2011

Et eksempel: Åtterspillet

Algoritmer og datastrukturer E Løkker i Java

INF1010, 23. februar Parametriserte klasser Om å gå gjennom egne beholdere (subklasser og grensesnitt 3)

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Vi skal se på grafalgoritmer for:

Algoritmer og Datastrukturer

Inf1010 oppgavesamling

UNIVERSITETET I OSLO

INF1010. Om pensum INF1010 INF1010 INF1010 INF1010. Det vesentlige er å forstå og kunne lage programmer ved hjelp av eksemplene i bøkene.

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

MED TIDESTIMATER Løsningsforslag

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Et eksempel: Åtterspillet

IN1010 våren januar. Objektorientering i Java

INF1010 Binære søketrær ++

TDT4100 Objektorientert programmering

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Sortering med Comparable og Comparator

Definisjon: Et sortert tre

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

Obligatorisk oppgave 4: Lege/Resept

Transkript:

Lenkelister, iteratorer, indre klasser Repetisjonskurs våren 2018 kristijb

Lenket liste av objekter Vi lager en lenke ved at objekter refererer til hverandre. Vanlige er ofte å ha Node-objekter som har en referanse til en annen Node (feks. neste), samt en referanse til et data-objekt vi ønsker å lagre i beholderen vår/den lenkede listen. Har gjerne referanse til foran/første Node i Lenkeliste-klassen.

Hvorfor lage egne beholdere? En lenkeliste er en svært enkel datastruktur å implementere. Selv om Javas standardbibliotek har en lenkeliste-implementasjon LinkedList, så kan det være nyttig å lage egne implementasjoner når vi har spesielle behov. Noen programmeringsspråk (som f.eks. C) har ikke noen implementasjon i sitt standardbibliotek, så da blir en nødt til å lage alt fra bunnen av.

Dobbellenket Dobbel: både referanse til forrige og neste. Ulempe: flere referanser å holde styr på. Fordel: kan enkelt gå begge veier i listen.

Enkeltlenket Enkel: kun referanse til neste. Ulempe: kan kun gå fra foran/første node og bakover. Fordel: færre referanser å holde styr på, og derfor kanskje enklere å få satt alt riktig.

Node-klassen To alternativer: LenkeListe har en (privat) indre klasse Node Hvis listen skal være generisk får vi: LenkeListe<T> og Node Fordel: Slipper å la Node være generisk siden T er bundet inne i LenkeListe<T> Ulempe: Hver implementasjon må ha sin egen Node-klasse. LenkeListe og Node er vanlige klasser Hvis listen skal være generisk får vi: LenkeListe<T> og Node<T> Fordel: Mulig å gjenbruke Node<T> Ulempe: Litt ekstra kode fordi typen til nodene i lenkelisten må være Node<T>.

Eksempel-kode: generisk klasse Lenkelise, privat indre klasse Node

Indre klasser Når ingen andre enn én klasse har behov for et type objekt, kan objektets klasse lagres som en indre klasse. For Lenkelister er det (ofte) kun lenkelisten selv som har behov for Noder (utenfor er man kun interessert i dataen som Nodene holder). Iteratorer er ofte indre klasser fordi de er definert til å fungere på en spesifikk liste (iteratorens implementasjon er tilpasset listens implementasjon), ingen andre skal bruke iteratoren. Anonyme klasser er en type indre klasse.

Innsetting og fjerning LIFO, FIFO, Ordnet FIFO - first in, first out. Kø. LIFO - last in, first out. Stack. Ordnet - i sortert rekkefølge. Klassen det skal sorteres på må da ha compareto-grensesnittet implementert.

Innsetting og fjerning: FIFO

Innsetting og fjerning: LIFO

Insetting, foran og bak i en enkel lenkeliste

Fjerning, foran og bak i en enkel lenkeliste

Iterator og Iteratble-grensesnittene Iterator - grensesnittet som implementeres på (den indre) klassen iterator (kall den hva du vil feks MinIterator: class MinIterator implements Iterator Iterable - grensesnittet som implementers på listen/beholderen som skal bli itererbar.

Fortsetter med samme enkle lenkeliste-eksemepel

Iterable public Iterator<T> iterator() > Returnerer en ny iterator over listen.

Iterator boolean hasnext() - returnerer true dersom det finnes et neste element og false dersom det ikke gjør det. T next() - returnerer innholdet/data i neste Node.

Implementert for vårt eksempel: I Lenkeliste-klassen:

Implementert for vårt eksempel: I LenkelisteIterator-klassen:

Annet Listehode og listehale - tomme noder som alltid er der, lagrer ikke data. Fordel: slipper å sjekke for en del spesialtilfeller. Når listen er tom er listehode == listehale. bakerst-peker i tillegg til foran - praktisk når man skal sette nye elementer inn bakerst, eller for en dobbeltlenket liste (kan da enkelt gå begge veier, begynne fra bakerst).