Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

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

Liknende presentasjoner


Presentasjon om: "Kap 04 Lister. Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)"— Utskrift av presentasjonen:

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 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 P BMSU P ny tab lenke M tablenke U B S head 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 EndP1EndP2 Linje LedP y5y5 y5y5

24 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

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 headnexttab

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_ objAobjB 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_ 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

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

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

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

51 DList removeLast x x n n n n n n DList E E E E E E 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 n n E E E E n n n n E E this insertBeforeinsertAfter Obj

55 Dlist Test_DList x x B B C C A A DList

56 ENDEND


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

Liknende presentasjoner


Annonser fra Google