huglægt skipulag gagna · 2006. 10. 30. · • gagnagrind ætti aðeins að nota í gegnum...

48
Kafli 8 Huglægt skipulag gagna © 2007 Pearson Addison-Wesley. All rights reserved

Upload: others

Post on 15-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • Kafli 8

    Huglægt skipulag gagna

    © 2007 Pearson Addison-Wesley.All rights reserved

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-2

    Kafli 8: Huglægt skipulag gagna

    • 8.1 Grunnatriði gagnagrinda (data structures)• 8.2 Útfærsla gagnagrinda• 8.3 Stutt sýnidæmi• 8.4 Sérhannaðar gagnagrindur• 8.5 Klasar og hlutir• 8.6 Bendar í vélarmáli

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-3

    Grunngagnagrindur

    • Einsleitt fylki (homogeneous array)• Sundurleitt fylki (heterogeneous array)• Listi

    – Stafli (stack)– Biðröð (queue)

    • Tré (tree)

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-4

    Mynd 8.1 Listar, staflar og biðraðir

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-5

    Helstu lista hugtök

    • Listi: safn gagna þar sem stökin eru geymd íröð

    • Haus (head): fremst í listanum• Hali (tail): aftast í listanum

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-6

    Helstu stafla hugtök

    • Stafli (stack): listi þar sem stökin eru sett inn og tekin út að framan

    • LIFO: "last-in-first-out"• Toppur (top): haus listans (staflans)• Botn (bottom): hali listans (staflans)• Pop: taka stak af toppnum• Push: setja inn stak á toppinn

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-7

    Helstu biðraðar hugtök

    • Biðröð (queue): listi þar sem stökin eru sett inn í halann og tekin út á hausnum

    • FIFO: "first-in-first-out"

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-8

    Mynd 8.2 Dæmi um skipulagstré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-9

    Helstu tré hugtök

    • Tré (tree): safn gagna þar sem stökin eru geymd í trjáskipulagi

    • Hnútur (node): stak í trénu• Rótarhnútur (root): Efsti hnúturinn• Lauf (leaf): Hnútur neðst í trénu

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-10

    Helstu tré hugtök (framh.)

    • Foreldri (parent): hnúturinn beint fyrir ofan tiltekinn hnút

    • Barn (child): hnútur beint fyrir neðan tiltekinn hnút

    • Forfaðir (ancestor): foreldri, foreldri foreldris, o.s.frv.

    • Niðji (descendent): barn, barnabarn, o.s.frv.• Systkini (siblings): hnútar með sama foreldri

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-11

    Helstu tré hugtök (framh.)

    • Tvíundartré (binary tree): tré þar sem hver hnútur hefur mest tvö börn

    • Dýpi (depth): fjöldi hnúta í lengstu leið frá rót til laufs

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-12

    Mynd 8.3 Tré hugtök

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-13

    Fleiri hugtök

    • Kyrrleg (static) gagnagrind: stærð og lögun gagnagrindarinnar breytist ekki

    • Kvikleg (dynamic) gagnagrind: stærð og lögun gagnagrindarinnar getur breyst

    • Bendar (pointers): notaðir til að staðsetja gögn

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-14

    Mynd 8.4 Bækur raðaðar eftir titli, en tengdar eftir höfundi

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-15

    Geymsla fylkja

    • Einsleit fylki– Línuröð (row-major) eða dálkröð (column-major)– Vistfangsmargliða

    • Sundurleit fylki– Einstakir hlutar geymdir hver á eftir öðrum í

    samfelldu minnissvæði– Einstakir hlutar geymdir á mismunandi stöðum og

    vísað í þá með bendum

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-16

    Mynd 8.5 Fylki með hitastigs-gildum geymt í minni sem byrjar í vistfangi x

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-17

    Mynd 8.6 Tvívítt fylki með fjórum línum og fimm dálkum geymt í línuröð

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-18

    Mynd 8.7 Geymsla á sundurleita fylkinu Employee

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-19

    Geymsla á listum

    • Samfelldur listi: listi sem er geymdur íeinsleitu fylki

    • Tengdur listi (linked list): listi þar sem stökin eru tengd með bendum– Hausbendir (head pointer): bendir á fyrsta stak

    listans– NULL bendir (NIL pointer): ólöglegt bendagildi

    sem notað er til að tákna enda listans

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-20

    Mynd 8.8 Nöfn geymd í minni sem samfelldur listi

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-21

    Mynd 8.9 Skipulag tengds lista

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-22

    Mynd 8.10 Eyðing staks úr tengdum lista

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-23

    Mynd 8.11 Innsetning staks ítengdan lista

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-24

    Geymsla stafla og biðraða

    • Staflar oftast geymdir sem samfelldir listar• Biðraðir oftast geymdar sem Hringbiðraðir

    (circular queue)– Geymt í samfelldu svæði þar sem fyrsta stakið

    kemur á eftir aftasta stakinu– Kemur í veg fyrir að biðröð skríði út úr

    minnissvæðinu sem henni hefur verið úthlutað

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-25

    Mynd 8.12 Stafli í minni

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-26

    Mynd 8.13 Útfærsla biðraðar með haus- og halabendum

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-27

    Geymsla á tvíundartré

    • Tengd gagnagrind– Hver hnútur = gagnasvæði + tveir bendar á börn– Aðgangur í gegnum bendi á rótarhnút

    • Varpað í samfellt fylki– A[1] = rótarhnútur– A[2],A[3] = börn A[1]– A[4],A[5],A[6],A[7] = börn A[2] og A[3]– …

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-28

    Mynd 8.14 Uppbygging hnútar ítvíundartré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-29

    Mynd 8.15 Huglægt- og raunskipulag tvíundartrés sem geymt er með tengdu skipulagi

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-30

    Mynd 8.16 Tré sem geymt er án benda

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-31

    Mynd 8.17 Strjált tré í ójafnvægi sýnt á huglægu formi og eins það myndi vera geymt án benda

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-32

    Notkun gagnagrinda

    • Gagnagrind ætti aðeins að nota í gegnum fyrirfram-skilgreind stef– Dæmi: Stafli þarf að minnsta kosti stefin push og pop

    – Gagnagrindin ásamt þessum stefjum myndar heilsteypt huglægt verkfæri

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-33

    Mynd 8.18 Stef til að prenta tengdan lista

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-34

    Notkunardæmi

    Verkefni: Smíða huglægt verkfæri sem samanstendur af lista af nöfnum ásamt aðgerðum til að leita, prenta og setja inn.

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-35

    Mynd 8.19 Stafirnir A til M íröðuðu tré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-36

    Mynd 8.20 Tvíundarleit eins og hún væri ef listinn væri útfærður sem tengt tvíundartré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-37

    Mynd 8.21 Stefið í Mynd 8.20 skoðar sífellt smærri tré þegar það leitar að bókstafnum J

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-38

    Mynd 8.22 Prentun á leitartré ístafrófsröð

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-39

    Mynd 8.23 Stef til að prenta gögnin í tvíundartré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-40

    Mynd 8.24 Innsetning staksins M innílistann B, E, G, H, J, K, N, P, sem er geymdur sem tré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-41

    Mynd 8.25 Stef til að setja nýtt stak inní lista sem er geymdur sem tvíundartré

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-42

    Notenda-skilgreint gagnatag

    • Mót fyrir sundurleita grind• Dæmi:define type EmployeeType to be

    {char Name[25];int Age;real SkillRating;}

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-43

    Huglægt gagnatag (abstract datatype)

    • Notenda-skilgreint gagnatag með aðferðum fyrir aðgang og notkun

    • Dæmi:define type StackType to be{int StackEntries[20];int StackPointer = 0;procedure push(value)

    {StackEntries[StackPointer] ← value;StackPointer ¬ StackPointer + 1;

    }procedure pop . . .

    }

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-44

    Klasi (class)

    • Huglægt gagnatag með viðbótum– Eiginleikar geta erfst– Hægt að hjúpa innihald– Smiðir til að upphafsstilla nýja hluti

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-45

    Mynd 8.26 Stafli af heiltölum útfærður í Java og C#

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-46

    Bendar í vélarmáli

    • Gildisvistfang (immediate addressing): skipunin inniheldur gögnin sem á að nota

    • Bein tilvísun (direct addressing): skipun inniheldur vistfang gagnanna sem á að nota

    • Óbein tilvísun (indirect addressing): skipun inniheldur staðsetningu vistfangs gagnanna sem á að nota

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-47

    Mynd 8.27 Fyrsta tilraun til að útvíkka vélarmálið í Viðauka C til að nota benda

  • © 2007 Pearson Addison-Wesley. All rights reserved 8-48

    Mynd 8.28 Hleðsla á gisti úr minnishólfi sem vísað er í með bendi sem er í gisti