INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Like dokumenter
Dagens tema INF1010 INF1010 INF1010 INF1010

Vanlige datastrukturer. I dette lysarksettet

Studieaktiviteter i INF1010

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

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

Versjon (vil bli endret).

Velkommen til INF1010

Lenkelister. Lister og køer.

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

Inf 1020 Algoritmer og datastrukturer

Liste som abstrakt konsept/datatype

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

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

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

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

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

INF1010. Stein Michael Storleer (michael) Lenkelister

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)

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

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

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

INF1010 siste begreper før oblig 2

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Grunnleggende Datastrukturer

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

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Algoritmer og Datastrukturer

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

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

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

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

EKSAMEN. Emne: Algoritmer og datastrukturer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

Lenkelister og beholdere av lenkelister

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

EKSAMEN med løsningsforslag

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

Definisjon av binært søketre

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

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Post-it spørsmål fra timen (Arv og subklasser)

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

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

Stack. En enkel, lineær datastruktur

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

OPPGAVE 5b og 8b Java Kode

Kapittel 9: Sortering og søking Kort versjon

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Kapittel 14, Hashing. Tema. Definere hashing Studere ulike hashfunksjoner Studere kollisjonsproblemet 17-1

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Løsnings forslag i java In115, Våren 1998

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

EKSAMEN. Algoritmer og datastrukturer

Forelesning inf Java 5

Definisjon: Et sortert tre

Forelesning inf Java 5

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

UNIVERSITETET I OSLO

INF1020 Algoritmer og datastrukturer. Dagens plan

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

INF1010. Rekursjon En rekursiv definisjon av rekursjon, slik det kunne stå i en ordbok: Introduksjon til Rekursiv programmering

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Generelle trær BINÆRTRÆR. Binærtrær

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

UNIVERSITETET I OSLO

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

Gjennomgang av eksamen H99

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Løsningsforslag til INF110 h2001

Algoritmer og datastrukturer Løsningsforslag

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

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

UNIVERSITETET I OSLO

Kapittel 8: Sortering og søking

PG4200 Algoritmer og datastrukturer Forelesning 7

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Transkript:

LISTER Vanligste datastruktur Mange implementasjonsmåter (objektkjeder, array...) Operasjoner på listen definerer forskjellige typer lister (LIFO, FIFO,...) På norsk bruker vi vanligvis ordet «liste» for en oppramsing (gjerne vertikal) på et stykke papir e.l., jf. kandidatliste, handleliste, spillerliste, sensurliste, deltakerliste, gjesteliste, sjekkliste, ordliste,... en databehandling er lister den vanligst forekommende datastruktur. Alle sekvensielle data kan kalles en liste. F.eks. kan en fil ses på som en liste av tekststrenger (linjer). En tekststreng er igjen en liste av tegn. Dette er et sett lysark for en forelesning. Noen sider er ufullstendige og vil kun være nyttig som grunnlag for selvstudium påført studentens merknader fra forelesningen. Særlig gjelder dette en del eksempler og Vi har allerede programmert med lister i. Her skal vi se nærmere på forskjellige måter å implementere lister på, samt forskjellige metoder til å håndtere listen på. figurer. Ifi 12. april 2005 Ark 1 av 24 Ifi 12. april 2005 Ark 2 av 24 Pekerkjede (lenket liste) Sammenligning med array FIFO køer Foran Bak LIFO køer Listeelementer og listeoperasjoner Datastruktur En liste er en (usortert) sekvens eller kjede av elementer i sier vi helst objekter av hva som helst. Hvert objekt i kjeden er «forbundet med» to naboobjekter, forrige objekt og neste objekt. Objektene kan for eksempel være navn, personer, biler, tegn, tall, tekststrenger,.... Objektene i en liste er ofte av samme type (instanser av samme klasse), men ikke alltid. Algoritmer Typiske listeoperasjoner er å Legge til et element Søke etter et element Fjerne et element Skrive ut alle elementene Ifi 12. april 2005 Ark 3 av 24 Ifi 12. april 2005 Ark 4 av 24

Pekerkjede implementasjon En liste kan implementeres som en pekerkjede, der hvert element i listen har en peker til det neste elementet i listen. Eksempel: Liste av personer class son { String navn; son nesteson; // Neste person i listen I selve personregisteret er det tilstrekkelig å ha en peker til den første personen i listen: class sonregister { son ; // Første person i listen Skrive ut alle personene i listen: void skrivalle() { while (p!= null) { p.skriv(); p = p.nesteson; setting av ny person først: Ida void settførst(son p) { p.nesteson = ; = p; Ifi 12. april 2005 Ark 5 av 24 Ifi 12. april 2005 Ark 6 av 24 Fjerning av den første personen i listen: son fjernførste() { if ( == null) { else { = p.nesteson; return p; Oppgave: Lag en metode antall som finner (og returnerer) antall personer i listen. Finne person med gitt navn: son finn(string navn) { while (p!= null &&!p.navn.equals(navn)) { p = p.nesteson; return p; Ifi 12. april 2005 Ark 7 av 24 Ifi 12. april 2005 Ark 8 av 24

Fjerne person med gitt navn: son fjern(string navn) { son forrige = null; while (p!= null &&! p.navn.equals(navn)) { forrige = p; p = p.nesteson; Sette inn ny person sist: Ida // p er personen som skal fjernes, // forrige er personen FØR denne i listen if (p!= null) { if (p == ) { // Spesialtilfelle: // personen som skal fjernes står først =.nesteson; else { forrige.nesteson = p.nesteson; return p; Eksempel: fjern() void settsist(son pers) { if ( == null) { = pers; else { while (p.nesteson!= null) { p = p.nesteson; // p er nå siste person i listen p.nesteson = pers; Ifi 12. april 2005 Ark 9 av 24 Ifi 12. april 2005 Ark 10 av 24 Implementasjon med sistepeker Har nå også en peker til den siste personen i listen: class sonregister { son ; son sisteson; Generelle lister setting av person sist blir da lett: void settsist(son pers) { if ( == null) { = pers; sisteson = pers; else { sisteson.nesteson = pers; sisteson = pers; Ifi 12. april 2005 Ark 11 av 24 Ifi 12. april 2005 Ark 12 av 24

Pekerkjede implementasjon class LenketListe implements Liste { Node første; class Node { Node neste; Object data; Søking public Object finn(int indeks) { int i = 0; while (i < indeks && n!= null) { i++; if (n!= null) { return n.data; else { (Eventuelt med siste peker i tillegg.) public int finn(object elem) { int i = 0; while (n!= null &&!n.data.equals(elem)) { i++; if (n!= null) { return i; else { return 1; Ifi 12. april 2005 Ark 13 av 24 Ifi 12. april 2005 Ark 14 av 24 setting public void sett(int indeks, Object elem) { Node ny = new Node(elem); if (indeks == 0) { // setting først ny.neste = første; første = ny; else { int i = 0; // Finner noden FØR innsettingspunktet while (i < indeks 1) { i++; ny.neste = n.neste; n.neste = ny; Fjerning public void ta(object elem) { Node forrige = null; while (n!= null &&!n.data.equals(elem)) { forrige = n; if (n!= null) { if (n == første) { første = første.neste; else { forrige.neste = n.neste; Ifi 12. april 2005 Ark 15 av 24 Ifi 12. april 2005 Ark 16 av 24

Traversering public void skrivliste() { while (n!= null) { System.out.println(n.data); Array implementasjon class ArrayListe implements Liste { Object[] liste; int lengde; Tomme lister public boolean ertom() { return (første == null); public void tømliste() { første = null; Antall public int antall() { int antall = 0; while (n!= null) { antall++; return antall; setting: Må flytte alle elementene fra og med innsettings posisjonen. I verste fall er arrayen full, og elementene må kopieres til en ny, større array. Søking: Enkelt med indeks oppslag. Søking etter et gitt element må traversere arrayen fra begynnelsen. Fjerning: Må flytte alle elementene etter innsettings posisjonen. Ifi 12. april 2005 Ark 17 av 24 Ifi 12. april 2005 Ark 18 av 24 (FIFO )Køer En FIFO kø (First In, First Out) er en liste der vi stort sett setter inn elementer i den ene enden, og tar ut elementer fra den andre enden: Foran Bak FIFO kø: Pekerkjede implementasjon class FIFOLenketListe extends LenketListe { Node siste; public void sett(object elem) { Node ny = new Node(elem); if (første == null) { første = ny; siste = ny; else { siste.neste = ny; siste = ny; Vi kan da utvide den generelle pekerkjede implementasjonen med en siste peker metoden void sett(object elem) for innsetting sist metoden Object ta() for fjerning av første element public Object ta() { if (første == null) { else { første = første.neste; return n.data; // Eventuelle endringer i de andre metodene // på grunn av siste pekeren. Ifi 12. april 2005 Ark 19 av 24 Ifi 12. april 2005 Ark 20 av 24

LIFO køer (Stakker) En LIFO kø (Last In, First Out) er en liste der innsetting/uttak alltid skjer først i listen. Dette kan sammenlignes med en stabel tallerkner: LIFO kø: Pekerkjede implementasjon setting og sletting vil nå normalt skje på begynnelsen av listen: class LIFOLenketListe extends LenketListe { public void sett(object elem) { Node ny = new Node(elem); ny.neste = første; første = ny; Andre eksempler: Metodekall i Java En full buss public Object ta() { // Som for FIFO køer! if (første == null) { else { første = første.neste; return n.data; Ifi 12. april 2005 Ark 21 av 24 Ifi 12. april 2005 Ark 22 av 24 Eksempel: Palindromer Palindromer er ord/uttrykk/setninger som er like forlengs og baklengs. Kjente eksempler: Otto ABBA radar regninger norsk: Agnes i senga svensk: Ni talar bra latin dansk: En af dem der red med fane Mulig løsning ❶ Les tekst strengen inn i både en LIFO og en FIFO kø. ❷ Sammenlign innholdet i de to køene tegn for tegn. public boolean sjekkpalindrom(string setning) { FIFOLenketListe fifo = new FIFOLenketListe(); LIFOLenketListe lifo = new LIFOLenketListe(); for (int i = 0; i < setning.length(); i++) { char bokstav = Character.toLowerCase(setning.charAt(i)); if (! Character.isWhitespace(bokstav)) { fifo.sett(new Character(bokstav)); lifo.sett(new Character(bokstav)); norsk: Alle reisetrette skal ete laks etter te, sier Ella engelsk: Madam, I am ill. I ve nine men in evil Lima. I m Adam norsk: Rolf Are vurderer om Arons ni drag i gardinsnora morer edru Vera Flor while (! fifo.ertom()) { if (! fifo.ta().equals(lifo.ta())) { return false; return true; Ifi 12. april 2005 Ark 23 av 24 Ifi 12. april 2005 Ark 24 av 24