Datastrukturer och algoritmer

January 8, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Data Structures
Share Embed Donate


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

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF