430 likes | 576 Vues
Inleiding Informatica. College 8, Brookshear hoofdstuk 7: Data Structures. 1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET : Pointers in machinetaal. Overzicht college 8. Arrays. Eén-dimensionele arrays
E N D
Inleiding Informatica College 8, Brookshear hoofdstuk 7:Data Structures Basiscursus Informatica 98/99
1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET: Pointers in machinetaal Overzicht college 8 Basiscursus Informatica 98/99
Arrays • Eén-dimensionele arrays • bv studenten[4] • relatief adres versus absoluut adres • echte geheugenadres = • beginadres + nummer van de cel - 1 ! • Multi-dimensionele arrays • Verschillende rijen afbeelden op een aaneengesloten rij geheugencellen • ‘row major’ of ‘column major’ ordening Basiscursus Informatica 98/99
Row major order rij1 Conceptueel rij2 rij3 X: 3de rij, 4de colom X rij4 Werkelijk rij3 rij4 rij2 rij1 X Algemeen: geheugenadres van bepaalde entry in array (C x (I - 1)) + (J - 1) C = #colommen, I-de rij, J-de kolom (5 x (3 -1)) + (4 -1) = 13 address polynomial Basiscursus Informatica 98/99
Row major order • X staat op plaats 14 in het array, toch komt uit de address polynominal het getal 13. • Vraag: Hoe kan dat? • Oplossing: plaats 1 is het beginadres, tel daar 13 plaatsen bij op, je komt dan op plaats 14 uit. Basiscursus Informatica 98/99
Ordening op kolommen • Omgekeerde telling: tel eerst de kolommen uit daarna de rijen • Vraag: staat X op het zelfde nummer? c1 c2 X Basiscursus Informatica 98/99
Voordelen - nadelen array’s • Voordelen: • vaste vorm • vaste inhoudstype • nadelen: • niet dynamisch • geen inhoudsvariatie • alternatieve structuur: lijsten Basiscursus Informatica 98/99
1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET: Pointers in machinetaal Overzicht college 8 Basiscursus Informatica 98/99
Lijsten • 1. “Contiguous lists” • blok van aaneengesloten geheugencellen (array) • problemen • element uit midden lijst verwijderen • toevoegen niet aan begin of eind • verplaatsen van veel elementen • 2. “Linked lists” • data verspreid over verschillende blokken cellen • maakt gebruik van pointers Basiscursus Informatica 98/99
Pointers • Geheugencel bevat het adres van andere geheugencel (ipv data) • Programmateller is ook een pointer • Flexibiliteit: data willekeurig verspreiden door het vrije 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
Linked list head pointer pointer pointer data data NIL data Basiscursus Informatica 98/99
Element verwijderen verwijderde element head pointer pointer pointer old data data new pointer NIL data Garbage collection: bijhouden en opruimen van verwijderde elementen Basiscursus Informatica 98/99
Element toevoegen nieuw element head pointer pointer data new pointer new data pointer data old NIL data Basiscursus Informatica 98/99
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 • Gevaar pointers: ‘chasing wild pointers’ Basiscursus Informatica 98/99
Conceptuele lijst • Ideaal: abstractienivo hoger werken dan de fysieke lijst dmv alle noodzakelijke operaties op een lijst: inkijken, toevoegen, weglaten • Meeste programmeertalen komen met ingebouwde procedures voor standaard operaties op lijst • Object-oriëntatie: klasse List, feitelijke lijststructuur is verborgen Basiscursus Informatica 98/99
1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET: Pointers in machinetaal Overzicht college 8 Basiscursus Informatica 98/99
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 o o o o o Basiscursus Informatica 98/99
Toepassing stack • Recursief aanroepen van processen • nieuwe proces “gepushed” op stack, en wordt actief • als proces klaar, “popped” 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
Implementatie stack • Blok aaneengesloten geheugencellen • Een eind wordt de stack base • Ander eind (variabel) is de stack pointer gereserveerde groeiruimte X X X X X X stack base stack pointer Basiscursus Informatica 98/99
1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET: Pointers in machinetaal Overzicht college 8 Basiscursus Informatica 98/99
Queues / Rijen • Operaties aan begin én aan eind van lijst • First-in, first-out (FIFO) • head en tail van een rij Basiscursus Informatica 98/99
Queue implementatie head pointer A kop tail pointer staart Invoegen bij de staartweglaten bij de kop A B B head head tail tail Basiscursus Informatica 98/99
“Lopende” rij A head pointer B head pointer C C D tail poiter E tail poiter F Circulair laten lopen in vast geheugenblok Basiscursus Informatica 98/99
1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET: Pointers in machinetaal Overzicht college 8 Basiscursus Informatica 98/99
Bomen • Knopen (nodes) • root node = top • leaf nodes (terminal) • Arcs (verbindingen tussen knopen) • Sub-bomen • Parent nodes, child nodes, sibling nodes • Binaire bomen Basiscursus Informatica 98/99
Implementatie bomen • “Linked” bomen • data cel • left child pointer • right child pointer • root pointer • NIL cell containing data left child pointer right child pointer Basiscursus Informatica 98/99
A B C D E F Binaire boom met pointers root pointer A C NIL F NIL NIL D NIL B NIL E Basiscursus Informatica 98/99
1 2 3 4 5 6 7 A B C D E F A B C D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D E E ongebalanceerde boom Boom in blok cellen A B C D E F gebalanceerde boom Linker kind in cel 2n Rechter kind in cel 2n + 1 Basiscursus Informatica 98/99
G D K F B I M C E A H J L 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, L Basiscursus Informatica 98/99
Binaire lijst • Boomstructuur gemaakt voor recursief werken • structuur is op het oog niet inzichtelijk • gewone bewerkingen, zoals printen en toevoegen, vergen nogal wat uitleg • ook hier: abstracte operaties dienen gedefinieerd te zijn Basiscursus Informatica 98/99
1. Arrays 2. Lijsten 3. Stapels (Stacks) 4. Wachtrijen (Queues) 5. Bomen (Trees) 6. WEL: Customized data types 7. NIET: Pointers in machinetaal Overzicht college 8 Basiscursus Informatica 98/99
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; Name Age Skillrating EmployeeType Manager, Buyer Basiscursus Informatica 98/99
Abstract Data Types (ADT) • Als customized data type, maar plus operaties • zowel type als toegestane operaties • package StackPackagetype StackOfIntegersrecord 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: StackOfIntegers push(106, MyStack) pop(OldValue, MyStack) Basiscursus Informatica 98/99
Abstract Data Types (ADT) • ADT = opslagstructuur plus operaties die er op uitgevoerd kunnen worden • Abstractie = details van de implementatie hoeft men niet te kennen om de operaties te kunnen gebruiken • Encapsulation = bescherming van de datastructuur tegen onbedoelde wijzigingen Basiscursus Informatica 98/99
Encapsulation • Operaties op data structuren kunnen alleen plaatsvinden via gedefinieerde procedures (methoden) • Public procedures (versus private data) • Helder programmeren en onderhoud • geen shortcuts naar private data mogelijk Basiscursus Informatica 98/99
Public procedures • package StackPackage is StackOfIntegersprocedure push(Value:in integer;Stack:in out StackOfIntegers);procedure pop(Value:out integer; Stack:in out StackOfIntegers);privatetype StackOfIntegersrecord 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
Object-georiënteerd (OO) • Klassen: nog meer flexibel dan ADT, uitbreiding met instantiëring en overerving • In plaats van procedures die data structuren manipuleren • Encapsuleer de data in de klasse en de procedures • Objecten manipuleren a.h.w. zichzelf: actieve objecten (Peter Coad: vend yourself) • Objecten zijn instanties van klassen Basiscursus Informatica 98/99
data A Data B data C data D data E Imperatieve benadering Simulatie van globale economie Controlling algorithm Basiscursus Informatica 98/99
Nation A Nation B Nation C Nation D Nation E Object-georiënteerd Basiscursus Informatica 98/99
Creëren van objecten • Class • constructor = patroon/template voor creëren van objecten • Inheritance • klassen hiërarchisch structureren • attributen worden overgeërfd • Polymorfisme • bericht is polymorf: interpretatie hangt af van type object • vergelijk overloading Basiscursus Informatica 98/99
Design pattern • Beschrijving van een probleem en de kern van de oplossing, zodanig dat de oplossing flexibel gebruikt kan worden • OO: oplossing in termen van objecten en interfaces: • beschrijving van communicerende klassen en objecten die aangepast worden om een algemeen probleem in een specifieke context op te lossen (Gamma, et al, p.3) Basiscursus Informatica 98/99
Frameworks (Gamma, et al,, p28) • Design patterns are more abstract than frameworks • alleen voorbeelden van patronen mogelijk • Dp are smaller architectural elements than fw • vaak meerdere dp in een fw • Dp are less specialized than fw • fw alltijd voor specifiek toepassingsgebied Basiscursus Informatica 98/99
OO paradigma • “Het lijkt erop dat het OO paradigma de software engineers eindelijk in staat stelt grote software systemen te construeren op basis van ge-prefabriceerde onderdelen, de klassen” (Brookshear, p.358) Basiscursus Informatica 98/99