Kap 04 Lister. Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)

Slides:



Advertisements
Liknende presentasjoner
Tabeller av objekter Klassen ArrayList
Advertisements

Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
TIF seminar -Visual Basic (VBA) og RExcel Elisabeth Orskaug Norsk Regnesentral Oslo, 8. november 2011.
Kontrollstrukturer (Kapittel 3)
Matematisk Induksjon.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Databasehåndtering med MySQL
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
Om Øvelse 7 Stoff relatert til øvelse 7 Generering av tilfeldige tall Bruk ting vi har lært før.
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
INF150 Programmering mandag 11.9
Kap 06 Ordnede / Sorterte lister. Ordnede lister / Sorterte lister OrderedList:Listestruktur hvor rekkefølgen har betydning Eks:Innholdsfortegnelse i.
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
Kap 01 Innledning I dette kapitlet skal vi se litt følgende hovedtemaer: - Kursoppbygging - Hva er algoritmer og datastrukturer - Anvendelser - …
Kap 07 Stakk I dette kapitlet skal vi se på datastrukturen stakk.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Kap 10 Graf.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Oversikt Den delen av Standard C++ Library som tidligere var STL Konsepter i STL: –Iteratorer –Samlinger (containers) –Algoritmer –Funksjonsobjekter.
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Høgskolen i Oslo Webprogrammering Ajax og PHP. I dag l Hvordan få en bedre brukeropplevelse via Ajax- script l Gjennomgang av kode l Oppgaveløsning på.
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Java 11 Programmering med og uten objekter: hva er forskjellen?
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
INF2820 Datalingvistikk – V2012
Kap 09 Tre.
INF3100 – – Ellen Munthe-Kaas Indeksering UNIVERSITETET I OSLO © Institutt for Informatikk Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10,
Eksempel: Sletting ved tynn indeks Slett post med a = 60 –Ingen endring nødvendig i indeksen. Slett post med a = 40 –Den første posten i blokken er blitt.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Ortering Mål: Se på forskjellige måter for sortering.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Iterator i Java boolean hasNext() E next() void remove()
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
Datakortet – Modul 3 Word 2003, Kap Modul 3.
Group theory I dette kapitlet skal vi se på utvidelse av lister som vi behandlet generelt i kap 04. Vi skal nå benytte klassehierarkiet som vi utviklet.
Utvalgte animerte lysark: lysark nr. 7, 8, 9, 10, 26, 28, 30, 33, 35
Utskrift av presentasjonen:

Kap 04 Lister

Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)

Innsetting vha orden-tabell Før innsettingEtter innsetting * * Knutsen

Lenke-tabell (åpen forelengs liste) Fysisk liste-struktur Ved lesing av data i sortert rekkefølge (her navn alfabetisk) leses først post nr 4 (fra Head), deretter post nr 2, post nr 1 og til slutt post nr 3. Lesing i sortert rekkefølge vha en såkalt Lenke-tabell.

Liste-tabell Logisk liste-struktur Omforming fra fysisk til logisk liste-struktur. Fysisk Logisk

Innsetting i en liste (logisk struktur) ny:= 5 navn[ny]:=’Knutsen’ forrige:=2 lenke[ny]:=lenke[forrige] lenke[forrige]:=ny forrigeny

Innsetting i en liste (fysisk struktur) forrigeny ny:= 5 navn[ny]:=’Knutsen’ forrige:=2 lenke[ny]:=lenke[forrige] lenke[forrige]:=ny

Bruk av struct / class ny:= 5 tab[ny].navn:=’Knutsen’ forrige:=2 tab[ny].lenke:=tab[forrige].lenke tab[forrige].lenke:=ny forrigeny

Innsetting sortert i en åpen forlengs liste (1) Tabell-elementer Innsett (head,tab,lenke,obj,ny) /*Rutinen setter inn et nytt element */ /*i en sortert åpen forlengs liste*/ /*implementert vha tabeller.*/ /*head:Peker til første liste-element*/ /*tab:Tabellen hvor post skal innsettes*/ /*lenke:lenke-tabell*/ /*obj :nytt data-element som skal innsettes*/ /*ny:Neste ledige plass i tabellen tab*/ BMSU P head ny obj = P tab lenke M tablenke U B S head P ny

Innsetting sortert i en åpen forlengs liste (2) Tabell-elementer BMSU P head ny obj = P tab lenke M tablenke U B S head P BMSU P ny tab lenke M tablenke U B S head P * * 4 * Før innsetting Etter innsetting

Innsetting sortert i en åpen forlengs liste (3) Tabell-elementer Innsett (head,tab,lenke,obj,ny) tab[ny]:=obj IF head = null THEN lenke[ny]:= null head:=ny ELSEIF tab[ny] < tab[head] THEN lenke[ny]:=head head:=ny ELSE forrige:= head neste:= lenke[forrige] WHILE (neste != null) AND (tab[ny] >= tab[neste]) DO forrige:= neste neste:=lenke[forrige] ENDWHILE lenke[ny]:=neste lenke[forrige]:=ny ENDIF BMSU P head ny BMSU P head ny tab lenke

Innsetting sortert i en åpen forlengs liste (4) Dynamiske elementer Innsett (head,obj) /*Rutinen setter inn et nytt element */ /*i en sortert åpen forlengs liste*/ /*implementert vha dynamiske elementer.*/ /*head:Peker til første liste-element*/ /*obj:nytt data-element som skal innsettes*/ BMSU P head ny obj = P data next node data next

Innsetting sortert i en åpen forlengs liste (5) Dynamiske elementer BMSU P head ny obj = P BMSU P head ny Før innsetting Etter innsetting

Innsetting sortert i en åpen forlengs liste (6) Dynamiske elementer Innsett (head,obj) ny = new Node() ny.data = obj IF head = null THEN ny.next:= null head:=ny ELSEIF ny.data < head.data THEN ny.next:=head head:=ny ELSE forrige:= head neste:= forrige.next WHILE (neste != null) AND (ny.data >= neste.data) DO forrige:= neste neste:=forrige.next ENDWHILE ny.next :=neste forrige.next:=ny ENDIF BMSU P head ny BMSU P head ny data next node obj = P

Innsetting først i en åpen forlengs liste Tabell-elementer InnsettFirst (head,tab,lenke,obj,ny) /*Rutinen setter inn et nytt element */ /*først i en åpen forlengs liste*/ /*implementert vha tabeller.*/ /*head:Peker til første liste-element*/ /*tab:Tabellen hvor post skal innsettes*/ /*lenke:lenke-tabell*/ /*obj:nytt data-element som skal innsettes*/ /*ny:Neste ledige plass i tabellen tab*/ tab[ny]:=obj lenke[ny]:=head head:=ny BMSU A head ny obj = A tab lenke

Innsetting i gitt posisjon i en åpen forlengs liste Tabell-elementer InnsettPos (head,tab,lenke,obj,ny,pos) /*Rutinen setter inn et nytt element */ /*i en gitt posisjon i en åpen forlengs liste*/ /*implementert vha tabeller.*/ /*head:Peker til første liste-element*/ /*tab:Tabellen hvor post skal innsettes*/ /*lenke:lenke-tabell*/ /*obj:nytt data-element som skal innsettes*/ /*ny:Neste ledige plass i tabellen tab*/ /*pos:Nytt element innsettes etter pos*/ tab[ny]:=obj IF pos = null THEN lenke[ny]:=head head:=ny ELSE lenke[ny]:=lenke[pos] lenke[pos]:=ny ENDIF BMSU P head ny pos tab lenke

Fjerning fra en åpen forlengs liste (1) Tabell-elementer Fjern (head,tab,lenke,obj,flag) /*Rutinen fjerner et element */ /*fra en åpen forlengs liste*/ /*implementert vha tabeller.*/ /*head:Peker til første liste-element*/ /*tab:Tabellen hvor post skal fjernes*/ /*lenke:lenke-tabell*/ /*obj:nytt data-element som skal innsettes*/ /*flag:Returnerer true hvis fjerning ok*/ BMSU head tab lenke obj = S

Fjerning fra en åpen forlengs liste (2) Tabell-elementer Fjern (head,tab,lenke,obj,flag) flag:= false IF head = null THEN listen er tom ELSEIF obj = tab[head] THEN head:=lenke[head] flag:=true ELSE forrige:= head neste:= lenke[forrige] WHILE (neste != null) AND (flag = false) DO IF obj = tab[neste] THEN lenke[forrige]:= lenke[neste] flag:=true ELSE forrige:= neste neste:=lenke[forrige] ENDIF ENDWHILE ENDIF BMSU head BMSU tab lenke obj = S

Dummy-element x head dummy

Sirkulær liste med dummy-element x head dummy

Dobbelt sirkulær liste med dummy-element head x

Maksimalt to linjer inn til hvert punkt x x x x x Punkt x1x1 x1x1 x2x2 x2x2 x3x3 x3x3 x4x4 x4x4 x5x5 x5x5 y1y1 y1y1 y2y2 y2y2 x3x3 x3x3 x4x4 x4x4 x5x5 x5x5 Ledig xKoordyKoord

Mer enn to linjer inn til punkter x x x x x Linje x1x1 x1x1 x2x2 x2x2 x3x3 x3x3 x4x4 x4x4 x5x5 x5x5 x5x5 x5x5 y1y1 y1y1 y2y2 y2y2 y3y3 y3y3 y4y4 y4y4 y5y5 y5y5 LedL xKoordyKoord Punkt EndP1EndP2 Linje LedP y5y5 y5y5

Punkter/Linjer i 3-dim - Frynsete arrays Punkt xKoordyKoord EndP1EndP2 4 4 zKoord NesteType TPkt TLin TPkt TLin TPkt 10 TLed TLin TLed Linje Led

Punkter/Linjer i 3-dim - Ringer Nettverk NesteLin LinList PktList Type EndPkt1 EndPkt2 NestePkt Type xKoord yKoord zKoord NestePkt Type xKoord yKoord zKoord NesteLin Type EndPkt1 EndPkt2

Punkter/Linjer i 3-dim - Fortran Free Array NesteLin LinList PktList Type EndPkt1 EndPkt2 NestePkt Type xKoord yKoord zKoord NestePkt Type xKoord yKoord zKoord NestePkt Type xKoord yKoord zKoord

init init (tab,dim) /*Rutinen oppretter en Fortran array med str dim*/ /*tab[1]:Antall elementer, dvs dim */ /*tab[2]:Peker til første ledige plass */ /*tab[3]:Peker til første ledige i liste*/ /*over returnerte poster*/ tab[1]:=dim tab[2]:=4 tab[3]:=0

retur retur (tab,lengde,pek) /*Rutinen sletter (returnerer) en post med lengde*/ /*lengde fra tabellen tab.*/ /*Pek peker til første element i returnert post.*/ /*Rutinen stiller den ledige plassen som oppstår*/ /* til disposisjon ved å knytte adressen til */ /*pekerlisten som starter i tab[3].*/ tab[pek]:=tab[3] tab[3]:=pek tab[pek+1]:=lengde

alloc (2/2) alloc (tab,lengde,pek) /*Plasserer ny linje eller nytt punkt*/ /*i Fortran array */ IF tilstrekkelig plass i ledig område plasser post i ledig område ELSEIF returnerte poster finnes søk etter plass i listen over returnerte poster ENDIF

alloc (1/2) IF tilstrekkelig plass i ledig område plasser post i ledig område ELSEIF returnerte poster finnes funnet_kor:= false funnet stor:= false hent første returnerte post WHILE (NOT funnet_kor) AND (flere returnerte poster) IF plass stor nok IF plass har korrekt størrelse plasser post funnet_kor := true funnet_stor:= false ELSE funnet_stor:= true ENDIF hent neste post ENDWHILE IF funnet_stor plasser post ENDIF

Enkle Java-rutiner for operasjoner på listestrukturer På de neste sidene følger noen enkle Java-rutiner for operasjoner på listestrukturer. DList benyttes videre i kurset. -Test_SList_01Testprogram for enkel navneliste -ElementKlasse bestående av en int og en next-peker -Test_SList_02Testprogram av liste bestående av element-objekter -ZtKlasse bestående av en int og en next-peker, inkl print -SListKlasse for håndtering av enkel åpen forlengs liste -Test_SList_03Testprogram som benytter SList for Zt-liste -DListKlasse for håndtering av generell dobbelt-lenket liste -Test_DListTestprogram som benytter DList

SList - Simple Test_SList_01 Nilsen 2 2 Hansen Persen Alfsen headnexttab

SList - Simple Element (1/2) x x next x x Element

SList - Simple Element (2/2) x x next x x Element

SList - Simple Test_SList_ objAobjB objC

SList - Simple Zt (1/2) x x next Zt

SList - Simple Zt (2/2) x x next Zt

SList - Simple SList_03 constructor / getHead x x next Zt SList head

SList - Simple SList_03 getFirst / getLast x x next Zt SList head x x next Zt

SList - Simple SList_03 addFirst / addLast x x next Zt SList head x x next Zt x x next Zt

SList - Simple SList_03 addSort x x next Zt SList head x x next Zt x x next Zt

SList - Simple SList_03 returnFirst / removeFirst / removeLast x x next Zt SList head x x next Zt

SList - Simple SList_03 makeEmpty / isEmpty x x next Zt SList head x x next Zt

SList - Simple SList_03 Test_SList_ objB iList head 5 5 objA 2 2 objC x x next Zt SList head x x next Zt 2 2 objC iList head 5 5 objA 7 7 objB

DList - Implementering x x n n n n n n DList E E E E E E DListDobbelt lenket liste med dummy-node xDummy-node nNode (DLNode) EElement DList DLNode

DList - attributter x x n n n n n n DList E E E E E E

DList - Tom liste x x DList head currentNode

DList - addFirst x x n n n n n n DList E E E E E E n n E E Obj

DList - addLast x x n n n n n n DList E E E E E E n n E E Obj

DList removeFirst x x n n n n n n DList E E E E E E Obj

DList removeLast x x n n n n n n DList E E E E E E Obj

DList - DLNode (1/3) constructor n n E E element prev next

DList - DLNode (2/3) set… / get… n n E E element prev next

DList - DLNode (3/3) insertBefore / insertAfter n n E E E E n n n n E E this n n E E E E n n n n E E this insertBeforeinsertAfter Obj

Dlist Test_DList x x B B C C A A DList

ENDEND