Datastrukturer Simple-type structs Selvrefererende (eng.: self-referential) objekter Sammenkædet liste (eng.: linked list) Stak (eng.: stack) Kø (eng.: queue) Binært søgetræ (eng.: binary search tree) ArrayList Steen Jensen, efterår 2013
Simple-type structs Hver simple type, fx bool, int, float (se appendix B i bogen) har en tilsvarende struct i namespace System, som definerer den simple type Disse structs hedder Boolean, Byte, Sbyte, Char, Decimal, Double, Single, Int16, UInt16, Int32, UInt32, Int64, UInt64 Simple typer er egentlig aliasser for deres tilsvarende structs Fx kan en variabel af type defineres enten af typen int eller Int32
Selvrefererende (eng.: self-referential) objekter Et selvrefererende objekt kan referere til et andet objekt af samme type Selvrefererende objekter kan kædes sammen og på denne måde udgøre brugbare datastrukturer, såsom lister, køer, stakke og træer
Sammenkædet liste (eng.: linked list) En sammenkædet liste (eng.: linked list) er en lineær samling af selvrefererende objekter (kaldt noder (eng.: nodes)) kædet sammen via reference links
Øvelse – linked list Gå ind på http://dotnet.dzone.com/articles/introduction-linked-lists-c Læs/kig tekst og eksempler igennem – efter du har gjort det, skal du kunne redegøre for følgende i plenum: Hvilke 2 problemer i.f.t. arrays løser linked list? Hvad indeholder en linked list node? Hvordan angives, at der ikke er en node før/efter en given node? Hvad gør metoderne AddFirst og AddLast ? Hvad gør metoderne AddBefore og AddAfter ? Hvad gør metoderne Find og Find Last ?
Stak (eng.: stack) En stak (eng.: stack) kan betragtes som en udgave af en linked list med restriktionen, at nye noder kun anbringes i toppen af stakken, samt at noder frigøres/fjernes fra toppen En stak kaldes derfor for en LIFO datastruktur (last-in, first-out)
Øvelse 1 – stack Gå ind på http://www.dotnetperls.com/stack Læs/kig tekst og eksempler igennem – efter du har gjort det, skal du kunne redegøre for følgende i plenum: Hvad gør metoderne Push og Pop ? Hvad er forskellen på Pop og Peek ? Hvad er formålet med egenskaben (eng.: property ) Count ? Hvad er formålet med metoden Clear ? Hvad gør metoden Contains ?
Øvelse 2 – stack Gå ind på http://www.dotnetspider.com/resources/1155-Using-Stack-C-Sharp.aspx Læs/kig eksemplerne igennem Copy/paste derefter kode ind i Visual Studio - NB! En vigtig ændring: System.Collections.Generic skal ændres til System.Collections Kør koden Lav koden om, så brugeren kan indtaste, hvor mange grøntsager, der skal blive tilbage i stakken. Fjern elementer fra stakken svarende til brugerens indtastning og udskriv til sidst den resterende stak
Kø (eng.: queue) En kø (eng.: queue) kan sammenlignes med en kø i supermarkedet Den første person i køen bliver betjent først Nye kunder stiller sig for enden af køen og venter på deres tur Noder i en kø indsættes for enden, og noder fjernes fra toppen En stak kaldes derfor for en FIFO datastruktur (first-in, first-out)
Øvelse 1 – kø (eng.: queue) Gå ind på http://www.dotnetperls.com/queue Læs/kig tekst og eksempler igennem – efter du har gjort det, skal du kunne redegøre for følgende i plenum: Hvilken metode bruges til at tilføje et element i køen ? Hvilken metode bruges til at fjerne et element i køen ?
Øvelse 2 – kø (eng.: queue) Gå ind på https://www.video2brain.com/en/lessons/generic-queue-queue60t62 Se videoen igennem (varer ca. 5 min.) – efter du har set videoen, skal du kunne redegøre for følgende i plenum: Hvilken virkelighedstro problemstilling løses med en kø i videoen? Hvad sker efter det 1. element i køen er behandlet?
Binært søgetræ (eng.: binary search tree) Et binært søgetræ (eng.: binary search tree) har følgende egenskaber: værdier i venstre subtræ er mindre end værdien i subtræets forældrenode (eng.: parent node) værdier i højre subtræ er større end værdien i subtræets forældrenode (eng.: parent node)
Øvelse 1 – binært søgetræ (eng.: binary search tree) Gå ind på http://www.csharpguru.in/2013/09/binary-search-tree-implementation-in-c-sharp.html Læs/kig tekst og eksempler igennem ned til før kodeeksemplet ”Implementation of binary search tree (BST) in C#” – efter du har gjort det, skal du kunne redegøre for følgende i plenum: Hvilken 3 egenskaber (eng.: properties) har et træ ? Definer begreberne root, left child, right child, siblings, leaf nodes
Øvelse 2 – – binært søgetræ (eng.: binary search tree) Gå ind på http://www.youtube.com/watch?v=5DW5ScDBH-E Se videoen igennem (varer ca. 14 min.) – efter du har set videoen, skal du kunne redegøre for følgende i plenum: Forklar hovedprincipperne for algoritmen for at tilføje en ny node i træet
Øvelse 3 – binært søgetræ (eng.: binary search tree) Gå ind på http://www.csharpguru.in/2013/09/binary-search-tree-implementation-in-c-sharp.html (samme link som øv. 1) Copy/paste kode ind i Visual Studio Kør koden Udvid koden, så du lægger flere værdier ind i træet
ArrayList Klassen ArrayList giver mulighed for at arbejde med arrays af dynamisk størrelse
Øvelse – ArrayList Gå ind på http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx Kig metoderne igennem (udvælg) – for hver metode: klik på link’et og kig på det viste kodeeksempel Kig som minimum metoder til at oprette (Add, Insert), og slette (Remove) igennem Prøv evt. også at copy/paste de udvalgte kodeeksempler ind i Visual Studio og kør dem. Find også meget gerne selv på ændringer til eksemplerne