Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertJohanna Hermansen Endret for 9 år siden
1
Kap 04 Lister
2
Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)
3
Innsetting vha orden-tabell Før innsettingEtter innsetting * * Knutsen
4
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.
5
Liste-tabell Logisk liste-struktur Omforming fra fysisk til logisk liste-struktur. Fysisk Logisk
6
Innsetting i en liste (logisk struktur) ny:= 5 navn[ny]:=’Knutsen’ forrige:=2 lenke[ny]:=lenke[forrige] lenke[forrige]:=ny forrigeny
7
Innsetting i en liste (fysisk struktur) forrigeny ny:= 5 navn[ny]:=’Knutsen’ forrige:=2 lenke[ny]:=lenke[forrige] lenke[forrige]:=ny
8
Bruk av struct / class ny:= 5 tab[ny].navn:=’Knutsen’ forrige:=2 tab[ny].lenke:=tab[forrige].lenke tab[forrige].lenke:=ny forrigeny
9
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 3 1 2 3 5 4 1 4 2 0 P ny
10
Innsetting sortert i en åpen forlengs liste (2) Tabell-elementer BMSU P head ny obj = P tab lenke M tablenke U B S head 3 1 2 3 5 4 1 4 2 0 P BMSU P ny tab lenke M tablenke U B S head 3 1 2 3 5 4 1 5 2 0 P * * 4 * Før innsetting Etter innsetting
11
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
12
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
13
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
14
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
15
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
16
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
17
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
18
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
19
Dummy-element x head dummy
20
Sirkulær liste med dummy-element x head dummy
21
Dobbelt sirkulær liste med dummy-element head x
22
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
23
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 4 4 1 1 2 2 3 3 1 1 1 1 5 5 4 4 3 3 4 4 2 2 3 3 EndP1EndP2 Linje LedP 6 3 4 1 5 2 y5y5 y5y5
24
Punkter/Linjer i 3-dim - Frynsete arrays Punkt 60 90 2 2 100 4 4 380 6 6 70 200 1 1 210 2 2 500 xKoordyKoord EndP1EndP2 4 4 zKoord 240 500 400 320 10 NesteType 2 2 4 4 5 5 6 6 8 8 TPkt TLin TPkt TLin TPkt 10 TLed TLin TLed Linje Led
25
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
26
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
27
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
28
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
29
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
30
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
31
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
32
SList - Simple Test_SList_01 Nilsen 2 2 Hansen Persen Alfsen 0 0 1 1 3 3 headnexttab 0 1 2 3
33
SList - Simple Element (1/2) x x next x x Element
34
SList - Simple Element (2/2) x x next x x Element
35
SList - Simple Test_SList_02 5 5 7 7 objAobjB 2 2.. objC
36
SList - Simple Zt (1/2) x x next Zt
37
SList - Simple Zt (2/2) x x next Zt
38
SList - Simple SList_03 constructor / getHead x x next Zt SList head
39
SList - Simple SList_03 getFirst / getLast x x next Zt SList head x x next Zt
40
SList - Simple SList_03 addFirst / addLast x x next Zt SList head x x next Zt x x next Zt
41
SList - Simple SList_03 addSort x x next Zt SList head x x next Zt x x next Zt
42
SList - Simple SList_03 returnFirst / removeFirst / removeLast x x next Zt SList head x x next Zt
43
SList - Simple SList_03 makeEmpty / isEmpty x x next Zt SList head x x next Zt
44
SList - Simple SList_03 Test_SList_03 7 7 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
45
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
46
DList - attributter x x n n n n n n DList E E E E E E
47
DList - Tom liste x x DList head currentNode 1 2 3 4 5 1 2 3 4 5
48
DList - addFirst x x n n n n n n DList E E E E E E n n E E 1 2 3 4 5 1 2 3 4 5 0 0 Obj
49
DList - addLast x x n n n n n n DList E E E E E E n n E E 1 2 3 4 5 0 0 1 2 3 4 5 Obj
50
DList removeFirst x x n n n n n n DList E E E E E E 1 2 3 4 5 6 1 2 3 4 5 6 Obj
51
DList removeLast x x n n n n n n DList E E E E E E 1 2 3 4 5 6 1 2 3 4 5 6 Obj
52
DList - DLNode (1/3) constructor n n E E element prev next
53
DList - DLNode (2/3) set… / get… n n E E element prev next
54
DList - DLNode (3/3) insertBefore / insertAfter n n E E E E n n n n E E this 1 2 3 4 5 1 2 3 4 5 n n E E E E n n n n E E this 1 2 3 5 4 1 2 3 4 5 insertBeforeinsertAfter Obj
55
Dlist Test_DList x x B B C C A A DList 7979 7979 2424 2424 5 5
56
ENDEND
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.