Date post: | 08-Jun-2015 |
Category: |
Documents |
Upload: | robert-abbink |
View: | 218 times |
Download: | 2 times |
Basiscursus Informatica 98/99 1Basiscursus Informatica, 98-99 College 7, H 7 1
Basiscursus InformaticaCollege 7, Data Structures
Brookshear H7
Richard Benjamins
Basiscursus Informatica 98/99 2Basiscursus Informatica, 98-99 College 7, H 7 2
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Programmeur denkt in conceptuele data structuren
Implementatie in centraal geheugen
Basiscursus Informatica 98/99 3Basiscursus Informatica, 98-99 College 7, H 7 3
Arrays
Een-dimensionale arrays studenten[4] echte geheugenadres?
– eerste cel + (4-1)– 13 + (4-1) = 16
Multi-dimensionale arrays Verschillende rijen afbeelden op een
aaneengesloten rij geheugencellen– row major order– column major order
Basiscursus Informatica 98/99 4Basiscursus Informatica, 98-99 College 7, H 7 4
Row major order
Conceptueel
Werkelijk
rij1
rij2
rij3
rij4
rij1 rij2 rij3 rij4
X: 3de rij, 4de colomX
X
Algemeen: geheugenadres van bepaalde entry in array(C x (I - 1)) + (J - 1) C = #colommen, Ide rij, Jde colom(5 x (3 -1)) + (4 -1) = 13 address polynomial
Basiscursus Informatica 98/99 5Basiscursus Informatica, 98-99 College 7, H 7 5
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Basiscursus Informatica 98/99 6Basiscursus Informatica, 98-99 College 7, H 7 6
Lijsten
“Contiguous lists”
blok van aaneengesloten geheugencellen (array) problemen
– element uit midden lijst verwijderen
– toevoegen niet aan begin of eind
– verplaatsen van veel elementen
“Linked lists” data is verspreid over verschillende blokken cellen maakt gebruik van pointers
Basiscursus Informatica 98/99 7Basiscursus Informatica, 98-99 College 7, H 7 7
Pointers
Geheugencel bevat het adres van andere geheugencel (ipv data)
Programmateller is ook een pointer
Daarom kan data verspreid worden door geheugen
bv 8 cellen voor data en 1 voor pointer
begin van de lijst: head pointer eind van de lijst: NIL pointer
Basiscursus Informatica 98/99 8Basiscursus Informatica, 98-99 College 7, H 7 8
Linked list
head pointer
datadata
data NIL
pointerpointer
Basiscursus Informatica 98/99 9Basiscursus Informatica, 98-99 College 7, H 7 9
Element verwijderen
head pointer
datadata
data NIL
pointerpointer
old
new pointer
verwijderde element
Garbage collection: bijhouden en opruimen van verwijderde elementen
Basiscursus Informatica 98/99 10Basiscursus Informatica, 98-99 College 7, H 7 10
Element toevoegen
head pointer
data
data
data NIL
pointer
pointer
old
data
pointer
new
new
nieuw element
Basiscursus Informatica 98/99 11Basiscursus Informatica, 98-99 College 7, H 7 11
Lijsten versus arrays
Probleem: als je een element wilt toevoegen aan array en het is vol
Bij een lijst hoef je van te voren niet de lengte te bepalen
Als je een element uit een array verwijdert dan blijft er een gat over. Om dat te vullen moeten alle elementen een plaats opschuiven
Basiscursus Informatica 98/99 12Basiscursus Informatica, 98-99 College 7, H 7 12
Operaties op lijst
Meeste programmeertalen komen met ingebouwde procedures voor standaard operaties op lijst
insert(“Beys”, “BC-Informatica-98.99”) printlist(“BC-Informatica-98.99)
Basiscursus Informatica 98/99 13Basiscursus Informatica, 98-99 College 7, H 7 13
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Basiscursus Informatica 98/99 14Basiscursus Informatica, 98-99 College 7, H 7 14
Stacks
Een ‘contiguous’ lijst waar operaties alleen aan het eind van de lijst worden uitgevoerd toevoegen: push operatie verwijderen: pop operatie
Last-in, first-out (LIFO)
Vergelijk stapel boeken
Behoud efficientie van contiguous list en reduceer nadelen
ooo
o
o
Basiscursus Informatica 98/99 15Basiscursus Informatica, 98-99 College 7, H 7 15
Toepassing stack
Recursief aanroepen van processen
nieuwe proces “gepushed” op stack, en wordt actief
als proces klaar, “poped” van stack en gaat door met oude proces
Lijst in omgekeerde volgorde printen
loop lijst af en push elementen op stack als aan eind van lijst, pop elementen van
stack en print ze
Basiscursus Informatica 98/99 16Basiscursus Informatica, 98-99 College 7, H 7 16
Implementatie stack
Blok aaneengesloten geheugencellen
Een eind wordt de stack base
Ander eind (variabel) is de stack pointer
stack baseX X X X X X
stack pointer
gereserveerde groeiruimte
Basiscursus Informatica 98/99 17Basiscursus Informatica, 98-99 College 7, H 7 17
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Basiscursus Informatica 98/99 18Basiscursus Informatica, 98-99 College 7, H 7 18
Queues / Rijen
Operaties aan begin en aan eind van lijst
First-in, first-out (FIFO)
head en tail van een rij
Basiscursus Informatica 98/99 19Basiscursus Informatica, 98-99 College 7, H 7 19
Queue implementatie
headpointer
tailpoiter
head
tail
head
tail
head
tail
A
AB B
Basiscursus Informatica 98/99 20Basiscursus Informatica, 98-99 College 7, H 7 20
“Lopende” rij
headpointer
tailpoiter
headpointer
tailpoiter
ABC C
DEF
Circulair laten lopen in vast geheugenblok
Basiscursus Informatica 98/99 21Basiscursus Informatica, 98-99 College 7, H 7 21
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Basiscursus Informatica 98/99 22Basiscursus Informatica, 98-99 College 7, H 7 22
Bomen
Knopen (nodes)
root note leaf notes (terminal)
Arcs (verbindingen tussen knopen)
Sub-bomen
Parent nodes, child nodes, sibling nodes
Binaire bomen
Basiscursus Informatica 98/99 23Basiscursus Informatica, 98-99 College 7, H 7 23
Implementatie bomen
“Linked” bomen
data cel left child pointer rright child pointer root pointer NIL
cell containingdata
left childpointer
right childpointer
Basiscursus Informatica 98/99 24Basiscursus Informatica, 98-99 College 7, H 7 24
Binaire boom met pointers
rootpointer
NIL
NIL
NILNIL
NILA
B
C
FD
E
DE
AB
C
F
Basiscursus Informatica 98/99 25Basiscursus Informatica, 98-99 College 7, H 7 25
Boom in blok cellen
DE
AB
C
F
Linker kind in cel 2nRechter kind in cel 2n + 1
gebalanceerde boom
1 2 3 4 5 6 7
A B C D E F
1 2 3 4 5 6 7
A B C D Eongebalanceerde boom
AB
C
D
E
8 9 101112131415
Basiscursus Informatica 98/99 26Basiscursus Informatica, 98-99 College 7, H 7 26
Lijst als binaire boom
Binair zoeken
middelste element is root middelste van linker helft is linker kind midddelste van rechter helft is rechter kind
A, B, C, D, E, F, G, H, I, J, K, M, LG
D K
B
A CI M
H J LE
F
Basiscursus Informatica 98/99 27Basiscursus Informatica, 98-99 College 7, H 7 27
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Basiscursus Informatica 98/99 28Basiscursus Informatica, 98-99 College 7, H 7 28
Customized data types
User-defined types
primitieve data types en data structuren kunnen als bouwstenen dienen voor complexe data typen
definieert nieuw type dat vanaf dan gebruikt kan worden
typedef struct {char Name[8]; int Age; float Skillrating; } EmployeeType;
EmployeeType Manager, Buyer
Name Age Skillrating
Basiscursus Informatica 98/99 29Basiscursus Informatica, 98-99 College 7, H 7 29
Abstract data types
Als customized data type, maar plus operaties
zowel type als toegestane operaties package StackPackage
type StackOfIntegers record StackEntries: array[1..25] of integer; StackPointer: integer; end record; procedure push(Value:in integer;Stack:in out StackOfIntegers); procedure pop(Value:out integer; Stack:in out StackOfIntegers);end StackPackage;
MyStack: StackOfIntegerspush(106, MyStack)pop(OldValue, MyStack)
Basiscursus Informatica 98/99 30Basiscursus Informatica, 98-99 College 7, H 7 30
Encapsulation
Operaties op data structuren kunnen alleen plaatsvinden via gedefinieerde procedures (methoden)
Public procedures (versus private)
Helder programmeren en onderhoud
geen shortcuts
Object-georienteerd
Basiscursus Informatica 98/99 31Basiscursus Informatica, 98-99 College 7, H 7 31
Public procedures
package StackPackage is StackOfIntegers procedure push(Value:in integer;Stack:in out StackOfIntegers); procedure pop(Value:out integer; Stack:in out
StackOfIntegers);private type StackOfIntegers record StackEntries: array[1..25] of integer; StackPointer: integer; end record; end StackPackage;
Niet direct naar StackEntries[3] verwijzen
Moet via 2 maal “pop” van element
Basiscursus Informatica 98/99 32Basiscursus Informatica, 98-99 College 7, H 7 32
Overzicht college 7
Arrays
Lijsten
Stacks
Queues
Bomen (trees)
Customized data types
Object-georienteerd programmeren
Basiscursus Informatica 98/99 33Basiscursus Informatica, 98-99 College 7, H 7 33
Object-Georienteerd
In plaats van procedures die data structuren manipuleren
Encapsuleer procedure in de data tot objecten
Objecten manipuleren zichzelf: actieve objecten
Objecten geassocieerd met methoden
Basiscursus Informatica 98/99 34Basiscursus Informatica, 98-99 College 7, H 7 34
Imperatieve benadering
Nation A Nation B Nation C Nation D Nation E
Controlling algorithm
Simulatie van globale economie
Basiscursus Informatica 98/99 35Basiscursus Informatica, 98-99 College 7, H 7 35
Object-georienteerd
Nation A
Nation B
Nation C
Nation D
Nation E
Basiscursus Informatica 98/99 36Basiscursus Informatica, 98-99 College 7, H 7 36
Creeren van objecten
Class patroon/template voor creeren van objecten
Inheritance klassen hierarchisch structureren attributen worden overgeerfd
Polymorphism bericht is polymorf: interpretatie hangt af
van type object vergelijk overloading