360 likes | 525 Views
Basiscursus Informatica. College 7, Data Structures Brookshear H7 Richard Benjamins. Arrays Lijsten Stacks Queues Bomen (trees). Customized data types Object-georienteerd programmeren Programmeur denkt in conceptuele data structuren Implementatie in centraal geheugen.
E N D
Basiscursus Informatica College 7, Data Structures Brookshear H7 Richard Benjamins Basiscursus Informatica 98/99
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Programmeur denkt in conceptuele data structuren Implementatie in centraal geheugen Overzicht college 7 Basiscursus Informatica 98/99
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
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, Ide rij, Jde colom (5 x (3 -1)) + (4 -1) = 13 address polynomial Basiscursus Informatica 98/99
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Overzicht college 7 Basiscursus Informatica 98/99
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
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
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 • 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
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
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Overzicht college 7 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, “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
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
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Overzicht college 7 Basiscursus Informatica 98/99
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
Queue implementatie head pointer A head tail poiter tail 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
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Overzicht college 7 Basiscursus Informatica 98/99
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
Implementatie bomen • “Linked” bomen • data cel • left child pointer • rright 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
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Overzicht college 7 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 • 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
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
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
Arrays Lijsten Stacks Queues Bomen (trees) Customized data types Object-georienteerd programmeren Overzicht college 7 Basiscursus Informatica 98/99
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
Nation A Nation B Nation C Nation D Nation E Imperatieve benadering Simulatie van globale economie Controlling algorithm Basiscursus Informatica 98/99
Nation A Nation B Nation C Nation D Nation E Object-georienteerd Basiscursus Informatica 98/99
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 Basiscursus Informatica 98/99