Innehåll Datastrukturer och algoritmer • Listor – Specifikation, Konstruktion – Algoritmmönster • Riktade listor, länkade celler Föreläsning 2 – Specifikation, Konstruktion – Dynamiska resurser 24 25 Lista Lista • Modell • • • • – Pärm • Bläddra, inspektera, lägga till, ta bort • Konstruktion – Dynamiskt med hjälp av länkade celler – Statiskt med hjälp av fält/arrayer Ändligt antal linjärt ordnade element Första / sista element Före / efter relation Dynamisk datatyp – Struktur och storlek förändras under datatypens livslängd 26 27 Lista Lista • Generisk datatyp (polytyp) • Element – Lista av typ – Värde och position • Typ kan vara av vilken typ som helst • Struktur • Homogen datatyp – Bortser från elementvärden – Alla element har samma typ • Position – Plats i strukturen 28 29 Gränsyta till Lista Tänkbar gränsyta i C !"#$%!&$'(!$!$)*+ List(val) !,-./.!%) pos ! Empty() -> List(val) Insert(v:val,p:pos,l:List(val))->(List(val),pos) Isempty (l:List(val)) -> Bool Inspect (p:pos,l:List(val)) -> val First (l:List(val)) -> pos End (l:List(val)) -> pos Next(p:pos,l:List(val)) -> pos Previous(p:pos,l:List(val)) -> pos Remove((p:pos,l:List(val)) ->(List(val),pos) typedef void * Data; list Empty(void); bool isEmpty(List l); Pos insert(List l, Data v, Pos p); Data inspect(List l,Pos p); Pos first(List l); Pos end(List l); Pos next(List l, Pos p); Pos previous(List l, Pos p); Pos remove(List l, Pos p); 30 31 Algoritmmönster Algoritmmönster • Reduktion • Traversering – Beräknar en funktion av objektets elementvärden – Besöker systematiskt alla element • Ex. Summera alla tal i en lista • Sökning – Söker det första elementet som uppfyller ett bestämt villkor • Filtrering • Mappning – Transformera varje elementvärde i en datastruktur • Ex. multiplicera alla talen i ! en lista med 4 – Filtrerar ut alla element som uppfyller ett bestämt villkor 32 Lista som Fält 33 Länkade strukturer • + Snabb inspektion av element • - Fast reserverat utrymme • - Kostsamt sätta in / ta bort element • + Insättning / borttagning går snabbt • + Minnesutrymmet är proportionellt mot ! storleken • + Allokera minne när det behövs • - länkarna behöver också minnesutrymme • - Kommer bara åt listelement genom att traversera från listans början 34 35 n-länkad Cell Cell typedef struct Cell{ DATA data struct Cell *next • Tippel som består av – ett värde – n stycken länkar } Cell; • Byggmaterial för andra datatyper • n-länkad struktur – Objekt konstruerade med n-länkade celler • Listor, träd 36 Cell används för positioner typedef Cell * Position; 37 Dubbellänkad Lista • Länkar mellan elementen • Elementen är en cell som består av länkar och värde 38 Dubbellänkad lista 39 -Dubbellänkad lista newNode skapas nodeAfter = noden som ska vara efter den nya noden • Före insättning • Skapa ny nod för insättning nodeBefore nodeBefore nodeAfter = nodeAfter:s ”bakåt” länk newNode:s ”framåt” länk = nodeAfter newNode:s ”bakåt” länk = nodeBefore newNode nodeBefore:s ”framåt” länk = newNode nodeAfter:s ”bakåt” länk = newNode 40 41 Dubbellänkad lista Dubbellänkad lista • Efter insättning och före borttagning • Ta bort ett element nodeToRemove nodeBefore nodeAfter nodeBefore = nodeToRemove:s ”bakåt” länk nodeAfter = nodeToRemove:s ”framåt” länk nodeBefore:s ”framåt” länk = nodeAfter nodeAfter:s ”bakåt” länk = nodeBefore 42 43 Dubbellänkad lista Riktad Lista • Efter borttagning • Modell – Slalombana • Kan bara flytta sig framåt • Specialisering av Lista 44 Riktad Lista 45 Gränsyta till Riktad Lista !"#$%!&$'(!$!$)*+ DList(val) • Previous och end behövs ej • Isend lagts till !,-./.!%) pos 46 ! Empty() -> DList(val) Insert(v:val,p:pos,l:DList(val)) ->(DList(val),pos) Isempty (l:DList(val)) -> Bool Inspect (p:pos,l:DList(val)) -> val First (l:DList(val)) -> pos Isend (p:pos,l:DList(val)) -> Bool Next(p:pos,l:DList(val)) -> pos Remove((p:pos,l:DList(val)) ->(DList(val),pos) 47 Riktad Lista Enkellänkad Lista • Konstruerad som • Problem vid insättning • Lösning: – Fält – Dubbellänkad Lista – Enkellänkad Lista – Representera position mha en länk till föregångarelementet – Listhuvud • Enkellänkad Lista • Tomma objekt • Gränspositioner – Mer ekonomisk 48 49 Enkellänkad Lista Länk • Konstruktion utan huvud • • • • – Stopplänkvärde (nil, null) – Insättning före elementet X • • • • Skapa en ny cell Sätt in den efter X Kopiera X:s värde till den nya cellen Sätt X:s värde till v Referens, pekare Objekt som refererar till annat objekt Konstrueras oftast som index i fält (kursor) Billigare kopiera länkar till objekt än objekten själva 50 Gränsyta till Länk Dynamiska resurser Abstract datatype! Link (obj) Make Nil Isnil Follow Equal 51 (x : obj) -> Link (obj) ( ) -> Link (obj) (l : Link (obj)) -> Bool (l : Link (obj)) -> obj (l1,l2 : Link (obj)) -> Bool • Skapar dataobjekt för tillfälliga behov • Kill- lösgör resurser – Jämför med i free C • Create - reserverar resurser – jämför med malloc, calloc, osv i C • Vålnader – minne som är avallokerat, men som vi fortfarande refererar till • Sophämtning 52 53