Document 7213724

Download Report

Transcript Document 7213724

Grundläggande
datavetenskap, 4p
Kapitel 8
Datastrukturer
Utgående från boken
Computer Science
av: J. Glenn Brookshear
2004-12-09
ITM
1
Innehåll
•
•
•
•
•
•
•
2004-12-09
Fält
Pekare
Listor
Träd
Stack
Kö
Egentillverkade datatyper
ITM
2
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
Index
Data
0
1
2
11,3 13,6 14,8
3
5,6
4
5
6
7
5,4 -2,3 -3,4 2,0
float avl[8];
avl[0] = 11.3;
avl[1] = 13.6;
avl[5] = -2.3;
2004-12-09
ITM
3
Tvådimensionellt fält
• Läs av temperaturen var tredje timme under
en vecka
Dag/Tid
0
1
2
3
4
5
6
0
11,3
12,4
13,5
14,6
15,7
16,8
17,9
1
13,6
14,5
15,4
16,3
17,2
18,1
19,0
2
3
14,8 5,6
14,2 6,6
13,6 7,6
13,0 8,6
12,4 9,6
11,8 10,6
11,2 11,6
4
5,4
5,5
5,6
5,7
5,8
5,9
6,0
5
-2,3
-2,2
-2,1
-2,0
-1,9
-1,8
-1,7
6
-3,4
-3,1
-2,8
-2,5
-2,2
-1,9
-1,6
7
2,0
2,5
3,0
3,5
4,0
4,5
5,0
float avl[8][7]; // avl[Tid,Dag]
avl[2][3] = 13.0;
avl[5][6] = -1.7;
2004-12-09
ITM
4
Listor
• Kontinuerlig lista (i minnet)
Eva
Olle
Per
– Ett fält är en kontinuerlig lista
– Fördel:
• enkel konstruktion
– Nackdelar:
•
•
•
•
2004-12-09
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
ITM
5
Pekare
• En pekare innehåller adressen till en
minnescell där data är lagrad
23,5
00AE1010
2004-12-09
ITM
6
Länkad lista
• Varje element har en pekare till nästa i listan
Olle
Huvud
Eva
Per
NIL
– Fördelar:
• enkelt att lägga till och radera data
• enkelt att sortera data
– Nackdel:
• något krångligare teknik
2004-12-09
ITM
7
Länkad lista II
• Radera ett element
Olle
Huvud
Eva
Per
NIL
– Ändra pekaren för elementet innan
– Lämna tillbaka minnesallokeringer för den
borttagna elementet
2004-12-09
ITM
8
Länkad lista III
• Lägga till ett element
Stefan
Olle
Huvud
Eva
Per
NIL
– Ändra pekaren för elementet innan
– Låt det nya elementet peka på nästa i listan
2004-12-09
ITM
9
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
10
Stack
Ida
Sven
Per
Olle
Eva
• 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
2004-12-09
ITM
11
Stack II
top
Eva Olle Per Sven Ida
SP
• 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”
2004-12-09
ITM
12
Kö
huvud
svans
Eva Olle Per Sven Ida
HP
TP
• 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
2004-12-09
ITM
13
Kö II
huvud
Per Sven Ida
svans
Ada Karl Ove
HP
TP
• 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
2004-12-09
ITM
14
Träd
Ekon. Chef
Reg 1
Ekon. chef
•
•
•
•
•
•
•
•
VD
Pers. chef
Säljchef
Reg 1
Ekon.
chef
Reg 2
Reg 3
Ekon. chef Ekon. chef
Reg2
Ekon.
chef
Reg 3
Ekon.
chef
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
2004-12-09
ITM
15
Träd i en länkad lista
• Ett binärträd implementerad med en länkad lista
A
B
D
C
E
Rot
Left child Right child
F
A
C
NIL
B
F
NIL NIL
E
NIL NIL
D
2004-12-09
Data
NIL NIL
ITM
16
Träd utan pekare
2004-12-09
ITM
17
Obalanserat träd utan pekare
2004-12-09
ITM
18
Manipulera datastrukturer
• Datastrukturer som ett abstrakt
verktyg
• Skapa funktioner som:
–
–
–
–
–
–
2004-12-09
Lägger till en post
Ta bort en post
Ändrar en post
Söker
Sorterar
Skriver ut
ITM
19
Utskrift av en lista i ett träd
G
D
K
B
A
F
C
Vilken skrivs ut först?
Vilken skrivs ut tvåa?
E
I
H
M
J
L
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
)
2004-12-09
ITM
20
Sökning i träd
• Data att lagra i trädet :
– ABCDEFGHIJKLM
• Lagra med ”mittenposten” i roten så blir det enkelt att
G
söka binärt
D
• Sökmetod:
–
–
–
–
B
K
F
I
M
A
C
E
H
J
L
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
2004-12-09
ITM
21
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 sätts in i listan B E G H J K N P
H
E
B
N
G
K
J
2004-12-09
P
M
ITM
22
Egentillverkade datatyper
• Skapa en egen datatyp för att hantera
– Namn
– Adress
– Skonummer
struct Person
Person person1, person2;
person1.name = ”Olle Svensson”;
person1.address= ”Gågatan 3”;
person1.shoeNr = 43;
{ string name;
string address;
person2.name = ”Eva Andersson”;
int shoeNr;
person2.address= ”Byvägen 43”;
};
2004-12-09
person2.shoeNr = 37;
ITM
23
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.
2004-12-09
ITM
24