Grundläggande datavetenskap, 4p
Transcript of 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
2004-12-09 ITM 2
Innehåll
• Fält• Pekare• Listor• Träd• Stack• Kö• Egentillverkade datatyper
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
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
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
2004-12-09 ITM 6
Pekare• En pekare innehåller adressen till en
minnescell där data är lagrad
23,500AE1010
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
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
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
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
)
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
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
2004-12-09 ITM 13
Kö
• 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
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
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
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
2004-12-09 ITM 17
Träd utan pekare
2004-12-09 ITM 18
Obalanserat träd utan pekare
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
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?
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
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
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;
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.