Grundläggande datavetenskap, 4p

24
2004-12-09 ITM 1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear

Transcript of Grundläggande datavetenskap, 4p

Page 1: Grundläggande datavetenskap, 4p

2004-12-09 ITM 1

Kapitel 8Datastrukturer

Grundläggande datavetenskap, 4p

Utgående från boken

Computer Scienceav: J. Glenn Brookshear

Page 2: Grundläggande datavetenskap, 4p

2004-12-09 ITM 2

Innehåll

• Fält• Pekare• Listor• Träd• Stack• Kö• Egentillverkade datatyper

Page 3: Grundläggande datavetenskap, 4p

2004-12-09 ITM 3

Fält (Array)• Endimensionellt fält

– Läs av temperaturen var tredje timme under 1 dygn

11,3 13,6 14,8 5,6 5,4 -2,3 -3,4 2,0

float avl[8];

avl[0] = 11.3;

avl[1] = 13.6;

avl[5] = -2.3;

Index 0 1 2 3 4 5 6 7Data 11,3 13,6 14,8 5,6 5,4 -2,3 -3,4 2,0

Page 4: Grundläggande datavetenskap, 4p

2004-12-09 ITM 4

Tvådimensionellt fält• Läs av temperaturen var tredje timme under

en vecka

float avl[8][7]; // avl[Tid,Dag]avl[2][3] = 13.0; avl[5][6] = -1.7;

Dag/Tid 0 1 2 3 4 5 6 70 11,3 13,6 14,8 5,6 5,4 -2,3 -3,4 2,01 12,4 14,5 14,2 6,6 5,5 -2,2 -3,1 2,52 13,5 15,4 13,6 7,6 5,6 -2,1 -2,8 3,03 14,6 16,3 13,0 8,6 5,7 -2,0 -2,5 3,54 15,7 17,2 12,4 9,6 5,8 -1,9 -2,2 4,05 16,8 18,1 11,8 10,6 5,9 -1,8 -1,9 4,56 17,9 19,0 11,2 11,6 6,0 -1,7 -1,6 5,0

Page 5: Grundläggande datavetenskap, 4p

2004-12-09 ITM 5

Listor• Kontinuerlig lista (i minnet)

– Ett fält är en kontinuerlig lista– Fördel:

• enkel konstruktion

– Nackdelar:• storleken sätts vid deklarationen• kan ta upp onödigt mycket utrymme• krånglig att hantera t.ex. vid sortering & sökning• krånglig att utöka

Eva Olle Per

Page 6: Grundläggande datavetenskap, 4p

2004-12-09 ITM 6

Pekare• En pekare innehåller adressen till en

minnescell där data är lagrad

23,500AE1010

Page 7: Grundläggande datavetenskap, 4p

2004-12-09 ITM 7

Länkad lista• Varje element har en pekare till nästa i listan

– Fördelar:• enkelt att lägga till och radera data• enkelt att sortera data

– Nackdel:• något krångligare teknik

Olle

HuvudEva

Per NIL

Page 8: Grundläggande datavetenskap, 4p

2004-12-09 ITM 8

Länkad lista II• Radera ett element

– Ändra pekaren för elementet innan– Lämna tillbaka minnesallokeringer för den

borttagna elementet

Olle

HuvudEva

Per NIL

Page 9: Grundläggande datavetenskap, 4p

2004-12-09 ITM 9

Länkad lista III• Lägga till ett element

– Ändra pekaren för elementet innan– Låt det nya elementet peka på nästa i listan

Stefan Olle

HuvudEva

Per NIL

Page 10: Grundläggande datavetenskap, 4p

2004-12-09 ITM 10

Länkad lista IV• Pseudokod för en procedur som skriver ut

en länkad lista:

procedure PrintList(List)

Assign curPointer the value headPointer

while curPointer inte är NIL do

( Skriv namnet i posten som curPointer pekar på;

Assign curPointer the value adressen i aktuell post

)

Page 11: Grundläggande datavetenskap, 4p

2004-12-09 ITM 11

Stack

• En stack är ett exempel på där man kan använda en kontinuerlig lista

• LIFO = Last In First Out– Tillägg och radering görs i toppen– Push = tillägg– Pop = radering

IdaSvenPerOlleEva

Page 12: Grundläggande datavetenskap, 4p

2004-12-09 ITM 12

Stack II

• Minne reserveras för en kontinuerlig lista (gulmarkerat)

• Stacken kan bli full• StackPointer (SP) innehåller adressen till den

senast inlagda posten• StackPointer flyttas när data ”poppas” och

”pushas”

topEva Olle Per Sven Ida

SP

Page 13: Grundläggande datavetenskap, 4p

2004-12-09 ITM 13

• FIFO = First In First Out– Tillägg görs vid svansen (bak)– Radering görs vid huvudet (fram)– HeadPointer (HP) pekar till början av kön– TailPointer (TP) pekar till slutet av kön– Om kön är tom pekar både HP och TP på samma

element

huvud svansEva Olle Per Sven Ida

HP

TP

Page 14: Grundläggande datavetenskap, 4p

2004-12-09 ITM 14

Kö II

• I en kontinuerlig lista utnyttjas utrymmet dåligt. • Den del som innehåller data flyttar sig inom det

reserverade utrymmet• Förbättring:

– Cirkulär lista– Länkad lista

huvud svans Per Sven Ida Ada Karl Ove

HP

TP

Page 15: Grundläggande datavetenskap, 4p

2004-12-09 ITM 15

Träd

• Nod = varje position i trädet• Rotnod = noden i ”toppen” av trädet• Löv = avslutande nod ”längst ner” i trädet• Subträd = delträd• Barn = noder närmast under en nod• Föräldrar= nod närmast över en nod• Syskon = noder med samma föräldrar• Djup = största antalet noder från rot till löv

VD

Ekon. Chef Pers. chef Säljchef

Reg 1 Ekon. chef

Reg 2 Ekon. chef

Reg 3 Ekon. chef

Ekon. chef

Ekon. chef

Ekon. chef

Page 16: Grundläggande datavetenskap, 4p

2004-12-09 ITM 16

Träd i en länkad lista• Ett binärträd implementerad med en länkad lista

A

B C

D E FData Left child Right child

Rot A C NIL

B F NIL NIL

D NIL NIL E NIL NIL

Page 17: Grundläggande datavetenskap, 4p

2004-12-09 ITM 17

Träd utan pekare

Page 18: Grundläggande datavetenskap, 4p

2004-12-09 ITM 18

Obalanserat träd utan pekare

Page 19: Grundläggande datavetenskap, 4p

2004-12-09 ITM 19

Manipulera datastrukturer• Datastrukturer som ett abstrakt

verktyg• Skapa funktioner som:

– Lägger till en post– Ta bort en post– Ändrar en post– Söker– Sorterar– Skriver ut

Page 20: Grundläggande datavetenskap, 4p

2004-12-09 ITM 20

Utskrift av en lista i ett träd

procedure PrintTree(Tree)

If(trädet inte är tomt)then

( Kör PrintTree för vänster subträd

Skriv rotNoden

Kör PrintTree för höger subträd

)

G

D K

B F I M

A C E H J L

Vilken skrivs ut först?Vilken skrivs ut tvåa?

Page 21: Grundläggande datavetenskap, 4p

2004-12-09 ITM 21

Sökning i träd• Data att lagra i trädet :

– A B C D E F G H I J K L M• Lagra med ”mittenposten” i roten så blir det enkelt att

söka binärt

• Sökmetod:– Ställ dig i roten– Om söktVärde < aktuelltVärde så gå till vänster barn – Om söktVärde > aktuelltVärde så gå till höger barn– Upprepa detta tills söktVärde = aktuelltVärde eller tills

listan är slut

G

D K

B F I M

A C E H J L

Page 22: Grundläggande datavetenskap, 4p

2004-12-09 ITM 22

M sätts in i listan B E G H J K N PH

E N

B G K P

J

Insättning av data i ett träd• Data kan sättas in som en nod i botten av trädet oavsett värdet • Metod:

– Sök i trädet med det nya värdet som sökvärde– Om det nya värdet redan finns görs inget– Om det nya värdet inte finns:

• Om nya värdet < värdet i aktuell nod så sätt in den nya noden som vänster barn• Om nya värdet > värdet i aktuell nod så sätt in den nya noden som höger barn

M

Page 23: Grundläggande datavetenskap, 4p

2004-12-09 ITM 23

Egentillverkade datatyper• Skapa en egen datatyp för att hantera

– Namn– Adress– Skonummer

struct Person

{ string name;

string address;

int shoeNr;

};

Person person1, person2;

person1.name = ”Olle Svensson”;

person1.address= ”Gågatan 3”;

person1.shoeNr = 43;

person2.name = ”Eva Andersson”;

person2.address= ”Byvägen 43”;

person2.shoeNr = 37;

Page 24: Grundläggande datavetenskap, 4p

2004-12-09 ITM 24

Egentillverkade datatyper- klasser

• I datatypen Person kan man lagra data, men inte manipulera det data som är lagrat.

• Vad betyder:– person1 < person2 ?– person3 = person2 ?

• I en klass kan man både lagra och utföra operationer på data.