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