Datastrukturer och algoritmer
Short Description
Download Datastrukturer och algoritmer...
Description
Lista
Datastrukturer och algoritmer
• Modell – Pärm • Bläddra, inspektera, lägga till, ta bort
• Konstruktion
Föreläsning 3
– Dynamiskt med hjälp av länkade celler – Statiskt med hjälp av fält/arrayer
58
59
Lista • • • •
Lista
Ändligt antal linjärt ordnade element Första / sista element Före / efter relation Dynamisk datatyp
• Generisk datatyp (polytyp) – Lista av typ • Typ kan vara av vilken typ som helst
• Homogen datatyp
– Struktur och storlek förändras under datatypens livslängd
– Alla element har samma typ
60
61
Lista
Gränsyta till Lista abstract datatype List(val)
• Element
auxiliary pos
– Värde och position
! 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)
• Struktur – Bortser från elementvärden
• Position – Plats i strukturen
62
63
Länk till Cell kan används för positioner
Tänkbar gränsyta i C typedef void * Data; list list_empty(void); bool list_isEmpty(List l); Pos list_insert(List l, Data v, Pos p); Data list_inspect(List l,Pos p); Pos list_first(List l); Pos list_end(List l); Pos list_next(List l, Pos p); Pos list_previous(List l, Pos p); Pos list_remove(List l, Pos p);
• I C: – typedef Cell * Position; • I Python kan Cell användas direkt då vi alltid har referenser till värden
64
65
Algoritmmönster
Algoritmmönster
• Traversering
• Reduktion – 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 66
Lista som Fält
67
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 + Allokerar minne när det behövs - Länkarna behöver också minnesutrymme - Kommer bara åt listelement genom att traversera från listans början 68
69
Dubbellänkad Lista
Dubbellänkad lista
• Länkar mellan elementen • Elementen är en cell som består av länkar och värde
• Före insättning
70
-Dubbellänkad lista
Dubbellänkad lista
newNode skapas nodeAfter = noden som ska vara efter den nya noden
• Skapa ny nod för insättning nodeBefore nodeBefore
nodeAfter
71
= nodeAfter:s
• Efter insättning och före borttagning
”bakåt” länk newNode:s ”framåt” länk = nodeAfter newNode:s ”bakåt” länk = nodeBefore nodeBefore:s ”framåt” länk = newNode
newNode
nodeAfter:s ”bakåt” länk = newNode
72
Dubbellänkad lista • Ta bort ett element
Dubbellänkad lista • Efter borttagning
nodeToRemove
nodeBefore
73
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 74
75
Riktad Lista
Riktad Lista
• Modell
• Previous och end behövs ej • Isend lagts till
– Slalombana
• Kan bara flytta sig framåt • Specialisering av Lista
76
77
Gränsyta till Riktad Lista
Riktad Lista
abstract datatype DList(val) auxiliary pos ! 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)
• Konstruerad som – Fält – Dubbellänkad Lista – Enkellänkad Lista
• Enkellänkad Lista – Mer ekonomisk
78
79
Enkellänkad Lista
Enkellänkad Lista
• Problem vid insättning • Lösning:
• Konstruktion utan huvud – Stopplänkvärde (nil, null) – Insättning före elementet X
– Representera position mha en länk till föregångarelementet – Listhuvud
• • • •
• Tomma objekt • Gränspositioner
80
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
81
View more...
Comments