Kap 04 Lister
description
Transcript of Kap 04 Lister
![Page 1: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/1.jpg)
Kap 04 ListerKap 04 ListerKap 04 ListerKap 04 Lister
![Page 2: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/2.jpg)
Listestrukturer
Listestrukturer hensiktsmessige ved såkalte flyktige tabeller(tabeller med relativt mye innsetting/sletting)
![Page 3: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/3.jpg)
Innsetting vha orden-tabell
Før innsetting Etter innsetting
*
*
Knutsen
NavnOrden
Alfsen
Persen
Hansen
Nilsen
3
1
2
4
Knutsen3
NavnOrden
Alfsen
Persen
Hansen
Nilsen
1
5
2
4
![Page 4: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/4.jpg)
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.
Head
4
NavnLenke
Alfsen
Persen
Hansen
Nilsen
2
0
1
3
![Page 5: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/5.jpg)
Liste-tabellLogisk liste-struktur
Omforming fra fysisk til logisk liste-struktur.
Fysisk
Logisk
Head
4
NavnLenke
Alfsen
Persen
Hansen
Nilsen
2
0
1
3
4321
Head
4
AlfsenPersenHansenNilsen 2013
3124
Head
4
Alfsen PersenHansen Nilsen 0312
![Page 6: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/6.jpg)
Innsetting i en liste (logisk struktur)
ny := 5navn[ny] := ’Knutsen’forrige := 2lenke[ny] := lenke[forrige]lenke[forrige] := ny
forrige ny
5
1Knutsen
3124
Head
4
Alfsen PersenHansen Nilsen 0352
![Page 7: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/7.jpg)
Innsetting i en liste (fysisk struktur)
forrige ny
ny := 5navn[ny] := ’Knutsen’forrige := 2lenke[ny] := lenke[forrige]lenke[forrige] := ny
Knutsen1
Head
4
NavnLenke
Alfsen
Persen
Hansen
Nilsen
2
0
5
3
![Page 8: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/8.jpg)
Bruk av struct / class
ny := 5tab[ny].navn := ’Knutsen’forrige := 2tab[ny].lenke := tab[forrige].lenketab[forrige].lenke := ny
forrige ny
5
1Knutsen
3124
Head
4
Alfsen PersenHansen Nilsen 0352
![Page 9: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/9.jpg)
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 */
B M S U
P
head
ny
obj = P
tab lenke tab lenke tab lenke tab lenkeM
tab lenke
U
B
S
head
3 1
2
3
5
4
1
4
2
0
P
ny
![Page 10: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/10.jpg)
Innsetting sortert i en åpen forlengs liste (2)Tabell-elementer
B M S U
P
head
ny
obj = P
tab lenke tab lenke tab lenke tab lenkeM
tab lenke
U
B
S
head
3 1
2
3
5
4
1
4
2
0
P
B M S U
P
head
ny
tab lenke tab lenke tab lenke tab lenkeM
tab lenke
U
B
S
head
3 1
2
3
5
4
1
5
2
0
P
*
*4 *
Før innsetting
Etter innsetting
![Page 11: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/11.jpg)
Innsetting sortert i en åpen forlengs liste (3)Tabell-elementer
Innsett (head,tab,lenke,obj,ny)
tab[ny] := objIF head = null THENlenke[ny] := nullhead := ny
ELSEIF tab[ny] < tab[head] THENlenke[ny] := headhead := ny
ELSEforrige := headneste := lenke[forrige]WHILE (neste != null) AND (tab[ny] >= tab[neste]) DOforrige := nesteneste := lenke[forrige]
ENDWHILElenke[ny] := nestelenke[forrige] := ny
ENDIF
B M S U
P
head
ny
B M S U
P
head
ny
tab lenke
![Page 12: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/12.jpg)
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 */
B M S U
P
head
ny
obj = P
data next data next data next data next
node node node node
nodedata next
![Page 13: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/13.jpg)
Innsetting sortert i en åpen forlengs liste (5)Dynamiske elementer
B M S U
P
head
ny
obj = P
B M S U
P
head
ny
Før innsetting
Etter innsetting
![Page 14: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/14.jpg)
Innsetting sortert i en åpen forlengs liste (6)Dynamiske elementer
Innsett (head,obj)
ny = new Node()ny.data = objIF head = null THENny.next := nullhead := ny
ELSEIF ny.data < head.data THENny.next := headhead := ny
ELSEforrige := headneste := forrige.nextWHILE (neste != null) AND (ny.data >= neste.data) DOforrige := nesteneste := forrige.next
ENDWHILEny.next := nesteforrige.next := ny
ENDIF
B M S U
P
head
ny
B M S U
P
head
ny
data next
node
obj = P
![Page 15: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/15.jpg)
Innsetting først i en åpen forlengs listeTabell-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] := objlenke[ny] := headhead := ny
B M S U
A
head
ny
obj = A
tab lenke
![Page 16: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/16.jpg)
Innsetting i gitt posisjon i en åpen forlengs listeTabell-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] := objIF pos = null THENlenke[ny] := headhead := ny
ELSElenke[ny] := lenke[pos]lenke[pos] := ny
ENDIF
B M S U
P
head
ny
pos
tab lenke
![Page 17: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/17.jpg)
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 */
B M S U
head
tab lenke
obj = S
![Page 18: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/18.jpg)
Fjerning fra en åpen forlengs liste (2)Tabell-elementer
Fjern (head,tab,lenke,obj,flag)
flag := falseIF head = null THENlisten er tom
ELSEIF obj = tab[head] THENhead := lenke[head]flag := true
ELSEforrige := headneste := lenke[forrige]WHILE (neste != null) AND (flag = false) DOIF obj = tab[neste] THENlenke[forrige] := lenke[neste]flag := true
ELSEforrige := nesteneste := lenke[forrige]
ENDIFENDWHILE
ENDIF
B M S U
head
B M S U
head
tab lenke
obj = S
![Page 19: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/19.jpg)
Dummy-element
x
head
dummy
NesteData
x
![Page 20: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/20.jpg)
Sirkulær liste med dummy-element
x
head
dummy
NesteData
x
![Page 21: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/21.jpg)
Dobbelt sirkulær liste med dummy-element
head
x
![Page 22: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/22.jpg)
Maksimalt to linjer inn til hvert punkt
11, yx
22 , yx
33 , yx
55 , yx
44 , yx
x
x
x
x
xPunktPunkt x1
x1
x2x2
x3x3
x4x4
x5x5
y1y1
y2y2
x3x3
x4x4
x5x5
LedigLedig
xKoord yKoord
![Page 23: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/23.jpg)
Mer enn to linjer inn til punkter
11, yx
22 , yx
33 , yx
55 , yx
44 , yx
x
x
x
x
xLinjeLinje x1
x1
x2x2
x3x3
x4x4
x5x5
x5x5
y1y1
y2y2
y3y3
y4y4
y5y5
LedLLedL
xKoord yKoord
Punkt
44
11
22
33
11
11
55
44
33
44
22
33
EndP1 EndP2
Linje
LedPLedP
6 3
4 1
5
2
y5y5
![Page 24: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/24.jpg)
Punkter/Linjer i 3-dim - Frynsete arrays
PunktPunkt 6060
9090
22
100100
44
380380
66
7070
200200
11
210210
22
500500
xKoord yKoord
EndP1 EndP2
44
zKoord
240240
500500
400400
320320
1010
Neste Type
22
44
55
66
88
TPktTPkt
TPktTPkt
TLinTLin
TPktTPkt
TLinTLin
TPktTPkt
1010 TLedTLed
TLinTLin
TLedTLed
LinjeLinje
LedLed
![Page 25: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/25.jpg)
Punkter/Linjer i 3-dim - Ringer
NettverkNettverk
NesteLinNesteLinLinListLinList
PktListPktList
TypeType
EndPkt1EndPkt1
EndPkt2EndPkt2
NestePktNestePkt
TypeType
xKoordxKoord
yKoordyKoord
zKoordzKoord
NestePktNestePkt
TypeType
xKoordxKoord
yKoordyKoord
zKoordzKoord
NesteLinNesteLin
TypeType
EndPkt1EndPkt1
EndPkt2EndPkt2
![Page 26: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/26.jpg)
Punkter/Linjer i 3-dim - Fortran Free Array
NesteLinNesteLinLinListLinList
PktListPktList
TypeType
EndPkt1EndPkt1
EndPkt2EndPkt2
NestePktNestePkt
TypeType
xKoordxKoord
yKoordyKoord
zKoordzKoord
NestePktNestePkt
TypeType
xKoordxKoord
yKoordyKoord
zKoordzKoord
NestePktNestePkt
TypeType
xKoordxKoord
yKoordyKoord
zKoordzKoord
![Page 27: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/27.jpg)
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] := dimtab[2] := 4tab[3] := 0
![Page 28: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/28.jpg)
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] := pektab[pek+1] := lengde
![Page 29: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/29.jpg)
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 finnessøk etter plass i listen over returnerte poster
ENDIF
![Page 30: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/30.jpg)
alloc (1/2)
IF tilstrekkelig plass i ledig område plasser post i ledig område
ELSEIF returnerte poster finnes funnet_kor := falsefunnet stor:= falsehent første returnerte postWHILE (NOT funnet_kor) AND (flere returnerte poster)IF plass stor nokIF plass har korrekt størrelseplasser postfunnet_kor := truefunnet_stor:= false
ELSEfunnet_stor:= true
ENDIFhent neste post
ENDWHILEIF funnet_storplasser post
ENDIFENDIF
![Page 31: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/31.jpg)
Enkle Java-rutinerfor operasjoner på listestrukturer
På de neste sidene følger noen enkle Java-rutiner for operasjoner på listestrukturer.DList benyttes videre i kurset.
- Test_SList_01 Testprogram for enkel navneliste
- Element Klasse bestående av en int og en next-peker- Test_SList_02 Testprogram av liste bestående av element-objekter
- Zt Klasse bestående av en int og en next-peker, inkl print- SList Klasse for håndtering av enkel åpen forlengs liste- Test_SList_03 Testprogram som benytter SList for Zt-liste
- DList Klasse for håndtering av generell dobbelt-lenket liste- Test_DList Testprogram som benytter DList
![Page 32: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/32.jpg)
SList - SimpleTest_SList_01
NilsenNilsen22
HansenHansen
PersenPersen
AlfsenAlfsen
00
-1-1
11
33
head next tab
0
1
2
3
![Page 33: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/33.jpg)
SList - SimpleElement (1/2)
xx nextnext xx nextnext
Element Element
![Page 34: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/34.jpg)
SList - SimpleElement (2/2)
xx nextnext xx nextnext
Element Element
![Page 35: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/35.jpg)
SList - SimpleTest_SList_02
55 77
objA objB
22 ..
objC
![Page 36: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/36.jpg)
SList - SimpleZt (1/2)
xx nextnext
Zt
![Page 37: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/37.jpg)
SList - SimpleZt (2/2)
xx nextnext
Zt
![Page 38: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/38.jpg)
SList - SimpleSList_03constructor / getHead
xx nextnext
ZtSList
head
![Page 39: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/39.jpg)
SList - SimpleSList_03getFirst / getLast
xx nextnext
ZtSList
head xx nextnext
Zt
![Page 40: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/40.jpg)
SList - SimpleSList_03addFirst / addLast
xx nextnext
ZtSList
head xx nextnext
Zt
xx nextnextZt
![Page 41: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/41.jpg)
SList - SimpleSList_03addSort
xx nextnext
ZtSList
head xx nextnext
Zt
xx nextnextZt
![Page 42: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/42.jpg)
SList - SimpleSList_03returnFirst / removeFirst / removeLast
xx nextnext
ZtSList
head xx nextnext
Zt
![Page 43: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/43.jpg)
SList - SimpleSList_03makeEmpty / isEmpty
xx nextnext
ZtSList
head xx nextnext
Zt
![Page 44: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/44.jpg)
SList - SimpleSList_03Test_SList_03
77
objBiList
head 55
objA
22
objC
xx nextnext
ZtSList
head xx nextnext
Zt
22
objCiList
head 55
objA
77
objB
![Page 45: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/45.jpg)
DList - Implementering
xx nn nn nn
DListDList
EEEE EE
DList Dobbelt lenket liste med dummy-nodex Dummy-noden Node (DLNode)E Element
DListDList
DLNodeDLNode
![Page 46: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/46.jpg)
DList - attributter
xx nn nn nn
DListDList
EEEE EE
![Page 47: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/47.jpg)
DList - Tom listexx
DListDList
head
currentNode
1
2
3
4
5
12 3
4
5
![Page 48: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/48.jpg)
DList - addFirst
xx nn nn nn
DListDList
EEEE EEnn
EE
1
2
3
45
12
3 45
0
0
Obj
![Page 49: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/49.jpg)
DList - addLast
xx nn nn nn
DListDList
EEEE EE nn
EE
1
2
3
4
5
0
0
12
3
4 5
Obj
![Page 50: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/50.jpg)
DListremoveFirst
xx nn nn nn
DListDList
EEEE EE
1
2
3
4
5
6
1
2
3
4
5
6
Obj
![Page 51: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/51.jpg)
DListremoveLast
xx nn nn nn
DListDList
EEEE EE
1
2
3
4
5
6
1
2
3
4 5
6
Obj
![Page 52: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/52.jpg)
DList - DLNode (1/3)constructor
nn
EE
element
prev next
![Page 53: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/53.jpg)
DList - DLNode (2/3)set… / get…
nn
EE
element
prev next
![Page 54: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/54.jpg)
DList - DLNode (3/3)insertBefore / insertAfter
nn
EEEE
nnnn
EE
this
1
2
3
4
5
1 2 34
5
nn
EEEE
nnnn
EE
this
1
2
3
5
4
1 2 34
5
insertBefore insertAfterObj Obj
![Page 55: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/55.jpg)
DlistTest_DList
xx BB CC AA
DListDList
7979
2424
55
![Page 56: Kap 04 Lister](https://reader033.fdocuments.net/reader033/viewer/2022042514/568147eb550346895db52279/html5/thumbnails/56.jpg)
ENDENDENDEND