Datastrukturer och algoritmer
Föreläsning 1-2
Datastrukturer och algoritmer
Innehåll

 Innehållsöversikt, upplägg, kursmaterial, kursutvärdering,
förväntade studie resultat etc...

Föreläsning
 Programbyggnadskonst
o Olika ansatser
o Viktiga begrepp
 Listor
o Specifikation, Konstruktion
o Algoritmmönster
 Riktade listor, länkade celler
o Specifikation, Konstruktion
o Dynamiska resurser

VT08
Kurspresentation och information
Att läsa: Kapitel 1-4
Datastrukturer och algoritmer
Kursens innehåll
 Abstrakta
datatyper
 Begrepp, definition, konstruktion
 Algoritmer
 Tids- och rumsfrågor
 Designprinciper
 Sökning
 Sortering
 Introduktion
till projektarbete enligt LIPS-
modellen
 Både teoretiskt och praktiskt
VT08
Datastrukturer och algoritmer
Kursens innehåll
– Abstrakta Datatyper (ADT)

Många olika ADT kommer att diskuteras!
 Stack, Kö, Listor, Träd, Graf, Prioritetskö, Heap, Tabell, Sträng,
Mängd, Sökträd, Tries, mm

Grundbegrepp
 Vad är en organisation, modell, gränsyta, sorterad ADT, mm
 Primär vs. sekundär struktur
 Absolut vs. relativ komplexitet

Varje ADT beskrivs på ungefär samma sätt
 Organisation, Modell, Gränsytan (formell, informell)
 Sätt att implementera
o
 Vart hittar vi ADT typiskt, vilka typproblem?
o
o
VT08
+/-, när var hur, komplexitet för de viktigaste operationerna
Hur hänger ADT ihop med andra ADT?
Algoritmer på ADT
Datastrukturer och algoritmer
Kursens innehåll
– Algoritmer
VT08
 Tids
och rumsfrågor
 Exekvering, implementering, underhåll
 Tids- och rumskomplexitet
o Fokus på tidskomplexitet
– T(n) för en alg => O(n)
o Experimentell och asymptotisk analys
 Att
beskriva algoritmer
 Designprinciper
 Brute force, Divide&conquer, Greedy och
dynamisk programmering
Datastrukturer och algoritmer
Kursens innehåll
– Algoritmer
VT08
 Sökning
(traversering)
 Vad är traversering
 Linjär- och Binärsökning
o +/o Krav på implementationen av ADTn
 Sortering
 Varför sorterar vi?
 Sorterad ADT vs sortering av data
 5-6 olika algoritmer, inklusive analys
o +/o Stabil sortering
Datastrukturer och algoritmer
VT08
Kursens innehåll –
Projektarbete enligt LIPS-modellen
 LIPS
utvecklad i Linköping
 http://www.liu.se/cul/resurser/lips
 En
introduktion och sedan får ni arbeta med en
delmängd av modellen
Bilden tagen från websidan ovan
Datastrukturer och algoritmer
Kursens upplägg
VT08
 Föreläsningar
(16 st)
 Teoripresentation och lite praktiska inslag
 Gruppövningar
(4 st)
 3 grupper, SI-stil
 OBS! Obligatorisk närvaro på gruppövning 4!
 Individuell
handledning i datorsal eller på
handledarens rum
 Examination
 Tentamen (moment 1)
 6 obligatoriska uppgifter (moment 2)
Datastrukturer och algoritmer
Tentamen
VT08
Ordinarie tentamen 5/6 9-15 i Noliahallen på Nolia!
 Anmälan krävs!

 https://www.cs.umu.se/information/tenta/
 Senast 10 dagar innan tentan ges

Enligt rektors beslut kodas tentamen
 Kan tyvärr leda till längre tid innan resultat anslås pga
administrativt trassel!
o Max 15 arbetsdagar (för första tentan blir det 30/6)

Ett urval av gamla tentamina från tidigare år finns på
kurssidan.
Datastrukturer och algoritmer
Obligatoriska uppgifter
VT08
2
OU utförs enskilt och 4 OU utförs parvis
 Ordinarie sista redovisningsdag står på varje
uppgifts webbsida.
 OU bedöms med G, K, O eller U
 Komplettering inom 5 arbetsdagar från första
tillfälle för uthämtning
 Finns
ett uppsamlingstillfälle (augusti).
 Måste göra om alla uppgifter
 Kan vara nya uppgifter/nya handledare
Datastrukturer och algoritmer
Obligatoriska uppgifter
VT08
 En
uppgift som är 5 minuter sen är för sen!
 Ansökan om uppskov pga exvis sjukdom ska
ske minst en dag före sista inlämningsdag.
 Kursansvarig bedömer uppskoven.
 Notera att det ingår i examinationen att ni ska lära
er att hinna blir klar med uppgifterna i tid.
o “Jag hinner inte” kommer inte att godtas som enda
skäl till uppskov.
 Resultat
anslås på kursens hemsida.
Datastrukturer och algoritmer
OU2
VT08
 Implementera
tabeller
 Individuell, inlämnas 15/4 klockan 12.00
 Syfte:
Du ska
 börja få en förståelse varför man använder sig av
abstrakta datatyper,
 analysera för- och nackdelar med olika
implementationer av ADT:n Tabell,
 öva dig i att hantera dynamiska strukturer,
 öva dig i skriftlig presentation.
Datastrukturer och algoritmer
OU4
VT08
 Analysera
algoritmer
 Experimentellt (individuell)
 Asymptotiskt (gruppövning med individuell
redovisning)
 Inlämnas 8/5 klockan 12.00
 Syfte:
Du ska
 få prova på att testa och utvärdera
implementationer av okända algoritmer.
 öva er på att analytiskt utvärdera algoritmer.
Datastrukturer och algoritmer
Projektet
VT08

Implementera mjukvaran i en Router
 Utförs parvis och delredovisas vid 4 tillfällen.

Syftet: Ni ska
 få praktiska kunskaper om användandet av datatyper och
algoritmer.
 utföra ett arbete under tidspress och lära er planera ert
arbete och prioritera bland olika lösningar för att få en
färdig produkt som uppfyller givna krav.
 få en introduktion till en projektmodell och träna att
arbeta utifrån den
 öva er att redovisa ett större arbete muntligt och skriftligt.
Datastrukturer och algoritmer
Projektets delredovisningar
VT08
 OU1
inlämnas 3/4 klockan 12.00
 Skapande av en projektgrupp
 OU3
inlämnas 21/4 klockan 12.00
 Skapande av en projektplan
 OU5
inlämnas 15/5 klockan 17.00
 Muntlig redovisning av pågående arbete på
gruppövning 4 och reviderad projektplan
 OU6
inlämnas 5/6 klockan 12.00
 Slutredovisning av färdig produkt och
dokumentation av projektet
Datastrukturer och algoritmer
Kursens (och bokens) strategi:
VT08

Beskriva datastrukturer och ansatser så neutralt och
språkoberoende som möjligt.
 Kunskaperna mer generella och allmänt tillämpbara.

Flesta studenterna har Java som bakgrund, några har
C som bakgrund.
 Läser du DV, ID, eller TDV eller har läst TDBA63,
TDBA62, 5DV081 eller 5DV090 ska du implementera
koden i Java.
 Läser du ett annat studieprogram, eller läst TDBA66,
TDBA39 eller 5DV035 så får du lösa uppgiften i C även
om vi rekommenderar att den görs i Java.

Oftast pseudokod på föreläsningarna
Datastrukturer och algoritmer
Kursmaterial
VT08

Kurslitteratur
 Janlert L-E., Wiberg T., Datatyper och
algoritmer, 2:a uppl., Studentlitteratur, 2000,
ISBN9144-01364-7
 Föreläsningsunderlag (finns på websidan)

Referenslitteratur:
 Mark Allen Weiss, "Datastructures and
Algorithm Analysis in Java", 2 ed, Pearson,
Addison Wesley ISBN 0-321-37319-7
 Mark Allen Weiss, "Datastructures and
Algorithm Analysis in C” Addison Wesley
Longman ISBN 0-321-18995-7
Datastrukturer och algoritmer
Kursmaterial
VT08
 Allt
material som ev. delas ut under kursen
 http://www.cs.umu.se/kurser/5DV043/VT08/
 Mycket information skickas via mail. Läs dina
cs-mail minst en gång om dagen!
 Gör forward:
https://support.cs.umu.se/userinfo/info/index.html
 Mail som skickas till hela gruppen lagras i ett
arkiv http://support.cs.umu.se/mail/archive/5dv043
Datastrukturer och algoritmer
Mina målsättningar
 Rolig
och viktig kurs
 Bli en bättre programmerare och inse att man
blivit det
 Känna till kända lösningar på typiska problem
 Konstruera robusta och korrekta program
 Konstruera och beskriva algoritmer och datatyper
 Planera sitt arbete så att projekt blir klar i tid
 Förstå
 Tid och rum
 Bli
VT08
komplexitetsbegreppet
bättre på att kommunicera resultat
Datastrukturer och algoritmer
Vad krävs för att nå dit?
VT08
 Ge
kursen en ärlig chans
 Kom i tid till föreläsningarna
 Läs boken, förstå vad som står där
 Gör övningar
 Börja med laborationerna i tid
 Utnyttja handledningen
 Säg till om det är något som inte funkar
Datastrukturer och algoritmer
VT08
Hur kan man
lägga upp sina studier?
 En
7,5 hp kurs motsvarar 200h total studietid
för ”normalstudenten”.
 5 veckor ger ca 40h/vecka.
 Delta
på undervisningen
 Läsa boken
 Göra obligatoriska uppgifter
 Repetera/”tentaplugga”
 Ofta samma sak som att arbeta med OU...
Datastrukturer och algoritmer
Hur kan jobbet fördelas?
 30h
läsa boken+LIPS-material
 5 min*max 370 sidor
 40h
övrigt ”tentaplugg”
 40h schemalagd undervisning (F/G)
 90h kvar till de obligatoriska uppgifterna
 15h till OU2
 25h till OU4
 50h till projektet (* 2 personer = 100h)
 PLANERING AV ARBETET VIKTIGT!
VT08
Översikt över kursen
Vecka 14
F/G
6
Plugg 7
OU
7
OU2 15h
15
6
7
7
16
4
7
9
OU3 8h
17
4
7
9
18
2
7
11
19
6
7
7
OU5 8h
Projektet 50h
OU4 25h
20
6
7
7
21
4
7
9
22
2
7
11
OU6 33,5h
OU1 0.5h
Projektet 50h * 2 personer = 100h!
23
0
7
13
Datastrukturer och algoritmer
Kursutvärdering från ifjol
VT08
 Bara
37 av 114 (32%) som svarade skriftligt
 Muntlig utvärdering genomfördes på sista
föreläsningen (ca 40)
 90 studenter aktiva hela kursen igenom
 Sammanfattning finns på sidan
 http://www.cs.umu.se/~kursv/TDBA36/VT-07/index.html
Datastrukturer och algoritmer
Till den som ska planera kursen nästa gång:
VT08
 Komplexitetsuppgiften
(OU3)
 Lägg gruppövningen (gö) längre ifrån inlämningsdagen.
 Var tydlig med att uppgiften kräver enskilt arbete utöver gö och att man
bör ha försökt lösa uppgiften före gö för att få optimal hjälp från gö.
 Routerlabben
(OU2 och OU4)
 Gör om OU2 så att den till exempel går ut på att skriva en
problembeskrivning för OU4.
o Tanken att "tvinga" studenterna att läsa OU4 och bearbeta specifikationen
lyckades inte helt.
 Skriv om specifikationen av OU4 från grunden eftersom den fortfarande
är svår att övergripa.
 Fundera på om Routerlabben ska bytas ut mot något annat, exempelvis
träd.
 Handledning
och rättning av obligatoriska uppgifter
 Gemensamma rättningsmallar för att minimera "orättvisor".
 Uppmuntra grupphandledning och sköt inte handledningen via mail.
o Samma frågor ställs flera gånger och mailandet tar för mycket tid från
personlig handledning.
Datastrukturer och algoritmer
Förändringar på kursen sen förra året
VT08
Komplexitetsuppgiften
(OU3 i år OU4)
 En vecka mellan gruppövning och inlämnande
 Info i specifikationen om förberedelse och tidsåtgång
Routerlabben
(OU2 och OU4)
 Drivs i projektform med 4 avstämningar
 Uppgiften och specifikation ordentligt genomarbetad
Handledning
och rättning av obligatoriska uppgifter
 Gemensamma mallar/diskussioner
 Handledningsresursen räcker inte till mailsvar kring
kodfrågor
Mängden
föreläsningar om träd minskar och en
föreläsning om projekt och projektmodellen LIPS
införs.
Datastrukturer och algoritmer
Registrering
Sker på studentexpeditionen eller hos Pedher
Johansson.
 Alla som antagits med villkor (alla studenter på
C/DV/ID) måste visa att man uppfyller
förkunskapskraven.

 Skriv ut ett Ladokutdrag!
o Gå till http://www.student.umu.se/
o Logga in (med ert UMDAC-student konto + lösenord)
o Välj fliken ”Expedition”
 Markera gärna förkunskaperna (5DV081/5DV090) med
överstrykningspenna...

Ingen examination förrän man är registrerad
 Regga dig innan första uppgiften ska vara inlämnad (på
torsdag)!
VT08
Datastrukturer och algoritmer
Förkunskaperna innebär i praktiken
VT08
 Studenten
ska
 kunna implementera en godtycklig algoritmbeskrivning i JAVA/C.
 ha god erfarenhet av problemlösning.
Datastrukturer och algoritmer
Kursens mål FSR (1)
VT08

Efter avslutad kurs ska studenten kunna:
 redogöra för grundläggande begrepp relaterade till
datastrukturer och algoritmer
 redogöra för organisation och specifikation för grundläggande abstrakta datatyper såsom lista, stack, kö, träd,
mängd, graf och tabell
 redogöra för grundläggande algoritmer, deras komplexitet
och karakteristiska egenskaper
 välja lämpliga datatyper och algoritmer för ett givet
problem
 välja och utföra lämpliga implementationer (konstruktioner) av de valda datatyperna och algoritmerna
Datastrukturer och algoritmer
Kursens mål FSR (2)
VT08

Efter avslutad kurs ska studenten kunna:
 analysera enklare algoritmer praktiskt och teoretiskt med
avseende på prestanda
 använda sig av grundläggande problemlösningsstrategier
(som till exempel divide and conquer, brute force, greedy
och dynamisk programmering) på nya problem
 tillämpa de teoretiska kunskaperna och objektorienteringsparadigmen praktiskt på ett programmeringsprojekt,
dvs. konstruera en komplett programvara inklusive dokumentation (med systembeskrivning och webbaserad API)
utifrån givna riktlinjer
 utforma en enkel arbetsplan för ett programmeringsprojekt som utförs i grupp samt dokumentera, följa upp
och skriftligt utvärdera den gjorda planeringen.
Datastrukturer och algoritmer
Inblandade personer
VT08

Föreläser
 Lena Kallin Westin ([email protected])
 Ola Ringdahl ([email protected])

Håller i gruppövningar:
 Ola Ringdahl
 Linus Jonsson ([email protected])
 Oskar Lindgren ([email protected])

Handleder och rättar obligatoriska uppgifter:
 Linus Jonsson
 Oskar Lindgren
 Johan Westerlund ([email protected])
Datastrukturer och algoritmer
MIT-huset, våning 4
VT08
Lablådor
Student
exp.
Oskar
Johan
Studievägl.
Pedher
support
Lena
Studievägl.
Lena P
Datastrukturer och algoritmer
MIT-huset, våning 2
VT08
Linus
Ola
Programbyggnadskonst, Listor
Datastrukturer och algoritmer
Att bygga program ≈ bygga hus/broar
Husbygge
Programmering
Specifikation/Beskrivning Problembeskrivning
Systemdesign
Material
Modelleringsverktyg
Verktyg
o Datatyper – representera datat i
Utvärdering/uppföljning
programmet
o Algoritmer – stegvis plan för att
utföra något, modellera hur man
löser problemet
o Kontrollstrukturer – för att
modellera flödet
Utvärdering/uppföljning
VT08
o Komplexitetsanalys
o Valideringskriterier
Datastrukturer och algoritmer
Metaforer och världsbilder för
programbyggnad
VT08
 Metaforer
för programbyggnad
 Instruktionsmetaforen
 Problemlösningsmetaforen
 Adaptionsmetaforen
 Världsbilder/ansatser
 Manipulativa ansatsen
 Funktionella ansatsen
 Objektorienterade ansatsen
Låg nivå
nära datorn
Hög nivå
Datastrukturer och algoritmer
Terminologi
 Inte
alltid enhetlig!
 Viktigt sätta grunden för bokens och kursens
innehåll.
bär information genom att representera
något.
 Data
12
x
3.4
52.1
7
VT08
’a’
y
”hej”
true
Datastrukturer och algoritmer
Terminologi
 Datatyp
= objekt + operationer
 Objekten finns i en värdemängd/objektmängd
 Operationerna kan vara funktioner, relationer och
predikat
12
-3
heltal =
34
52
7
98
VT08
-345
0
-
+
15
”udda”
*
% + ”jämn”
>
/
<=
Lista av heltal:
1
Heltal:
1,2,3,4
7
3
Relation
(personinfo)
namn
ålder
kön
5
till exempel
till exempel
heterogen
homogen
kan vara
till exempel
sammansatt
enkel
... kan vara...
datatyp
Står det bara ”datatyp” så
menar man ”abstrakt datatyp”
datatyp
... kan vara...
konkret
abstrakt
... kan vara ...
När man pratar om en datatyp utan
att bry sig om och hur den är
realiserad i programspråk/hårdvara
Kan anses
vara abstrakt
eftersom...
fysisk
konstruerad
implementerad
När man besrkivit hur objekten
ska representeras och hur
operationerna skulle kunna
implementeras (algoritmer)
En fysisk datatyp är...
En datatyp som är impl i en fysik datatyp är...
Implementerad i språket/hårdvaran
tex int, char
Komplett konstruerad från grunden och
redo att användas i ett program
Datastrukturer och algoritmer
Mer terminologi:
VT08
 Element
 Beståndsdel i en sammansatt datatyp
 Består av värde och position
a
Värde: 2
Position: 3
23 53
2
0
-2
c
f
d
g
e
h
i
j
Värde: d
Position: 2:a barn till roten
Datastrukturer och algoritmer
Mer terminologi:
VT08

Struktur
 Bortser från elementvärden
 Ändras när element läggs till eller tas bort
 Listan (1, 2) och ((1,2,3) , (4,5,6)) har samma struktur

Position
 Plats i strukturen
 Positionsbeskrivningar förändras när element sätts in eller
tas bort
 Hur man anger positioner avgörs vid konstruktionen av
datatypen.
 Strukturförändrande operationer behöver returnera nytt
positionsvärde
Datastrukturer och algoritmer
Genomgång av en datatyp
- Beskrivningar
Modell - vardaglig, ”det man modellerar”
 Organisation

 Grundläggande natur på objekten, linjärt ordnade, före
och efter relation etc.






VT08
Informell beskrivning
Gränsytan (de operationer som hör till datatypen)
Informell beskrivning av operationernas funktion
Signaturdiagram
Ofta den mest omfattande beskrivningen!
Formell beskrivning
 rent matematisk-logisk (axiom och slutsatser)
Datastrukturer och algoritmer
Genomgång av en datatyp
VT08
 Konstruktioner
och implementationer
 Olika sätt att konkretisera datatypen
o ”Lista som en array” vs ”Lista som en dynamisk
struktur”
 Komplexitetsanalys
 Exemplen i boken i huvudsak Java eller ML
 Tillämpningar
och algoritmer
 Typproblem och algoritmer som löser dem
 Komplexitetsanalys
Datastrukturer och algoritmer
Lista
VT08
 Modell
 Pärm
o Bläddra, inspektera, lägga till, ta bort
 Organisation
 Diskret linjärt ordnad
o
o
o
o
o
Ändligt antal linjärt ordnade element
Första / sista element
Före / efter relation av element (inte värden)
Alla element (utom det sista) har en efterföljare
Alla element (utom det första) har en föregångare
Datastrukturer och algoritmer
ADT:n Lista är en
 Dynamisk
datatyp
 Struktur och storlek förändras under datatypens
livslängd
 Generisk
datatyp (polytyp)
 Lista av typ
o Typ kan vara av vilken typ som helst
o Lista av heltal, Lista av tecken, etc
 Homogen
datatyp
 Alla element har samma typ
VT08
Datastrukturer och algoritmer
Lista – Specifikation: Gränsyta
VT08
abstract datatype List(val)
auxiliary 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)
Datastrukturer och algoritmer
VT08
Bild från sidan 47 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000
Datastrukturer och algoritmer
Varför är specifikationen viktig?
VT08
Nu kan vi skapa algoritmer för listor utan att behöva
bry oss om hur listan verkligen implementeras.
 Ex, Söka efter elementet med värdet v i listan
list:
If not isEmpty(list) Then
p:= first(list)
While Not (Next(p,list) = End(list)
Or v = inspect(p, list)) Do
p:= next(p, list)
End
End

Datastrukturer och algoritmer
Implementation av gränsyta till Lista
VT08
public interface List{
public
public
public
public
public
public
public
public
}
boolean isEmpty();
Pos insert(Object v, Pos p);
Object inspect(Pos p);
Pos first();
Pos end();
Pos next(Pos p);
Pos previous(Pos p);
Pos remove(Pos p);
Datastrukturer och algoritmer
Implementation av gränsyta till Pos
VT08
public interface Pos {
public boolean eq(Pos p);
}
Implementation av gränsytan i C
/* Funktionsprototyper */
list_t *list_empty();
pos_t *list_insert(void *v, pos_t *pos,
list_t *list);
int
list_isempty(list_t *list);
void *list_inspect(pos_t *pos, list_t *list);
int
list_isend(pos_t *pos, list_t *list);
pos_t *list_first(list_t *list);
pos_t *list_next(pos_t *pos, list_t *list);
pos_t *list_remove(pos_t *pos, list_t *list);
Lista – Konstruktion: Statiskt
 Lista
som Fält
+ Snabb inspektion av element
- Fast reserverat utrymme
- Kostsamt sätta in
och ta bort element
Bild från sidan 51 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000
Datastrukturer och algoritmer
Lista – Konstruktion: Dynamiskt
VT08
 Länkade
strukturer
+ 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
 Huvudlös
eller med huvud
 Cirkulär eller linjär
Datastrukturer och algoritmer
Länkad Lista
VT08
 Länkar
mellan elementen
 Elementen är en cell som består av länkar och
värde
 Dubbel eller enkellänkad
Datastrukturer och algoritmer
Dubbellänkad lista
VT08
 Före
insättning
Dubbellänkad lista
 Skapa
ny nod för insättning
nodeBefore
nodeAfter
newNode skapas
newNode
nodeAfter = noden som ska vara efter den nya
noden
nodeBefore = nodeAfter:s ”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
nodeAfter:s ”bakåt” länk = newNode
Datastrukturer och algoritmer
Dubbellänkad lista
VT08
 Efter
insättning och före borttagning
Datastrukturer och algoritmer
Dubbellänkad lista
 Ta
bort ett element
nodeToRemove
nodeBefore
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
VT08
nodeAfter
Datastrukturer och algoritmer
Dubbellänkad lista
VT08
 Efter
borttagning
Datastrukturer och algoritmer
Algoritmmönster
VT08
 Traversering
 Besöker systematiskt alla element
 Sökning
 Söker det första elementet som uppfyller ett
bestämt villkor
 Filtrering
 Filtrerar ut alla element som uppfyller ett bestämt
villkor
Datastrukturer och algoritmer
Algoritmmönster
VT08
 Reduktion
 Beräknar en funktion av objektets elementvärden
o Ex. Summera alla tal i en lista
 Mappning
 Transformera varje elementvärde i en datastruktur
o Ex. multiplicera alla talen i en lista med 4
Datastrukturer och algoritmer
Riktad Lista

Modell





Slalombana
Man kan ta sig till starten
Man passerar portarna i en riktning
Man kan ”åka” om en del av banan
Organisation
 Specialisering av Lista
 Har endast en riktning från början av listan och framåt.

Rekursiv definition:
 En riktad lista är tom eller har ett första element som följs
av en riktad lista
VT08
Datastrukturer och algoritmer
Riktad Lista – Specialisering
VT08
 Man
tar bort operationer ur gränsytan, utan att
mängden objekt som kan konstrueras
förändras.
 Två objekt som är lika, ska vara lika också i
specialiseringen.
 Previous
och end behövs ej och Isend lagts till
 Java: Kan ej ta bort en del av gränsytan
 Exceptions för previous och end
 Riktad Lista som helt ny klass
- Ingen återvinning av kod...
Gränsyta till 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)
Datastrukturer och algoritmer
Riktad Lista – konstruktion
VT08
 Konstruerad
som
 Fält
 Dubbellänkad Lista
 Enkellänkad Lista
 Enkellänkad
Lista
 Mer (rums)ekonomisk – behöver ju ändå inte
bakåtlänkarna
Datastrukturer och algoritmer
Riktad Lista som Enkellänkad Lista
VT08
 Problem
vid insättning
 Lösning:
 Representera position mha en länk till
föregångarelementet
o Fysisk och logisk referens
 Listhuvud
o Tomma objekt
o Gränspositioner
Datastrukturer och algoritmer
Enkellänkad Lista
VT08
 Konstruktion
utan huvud
 Stopplänkvärde (nil, null)
 Insättning före elementet X
o
o
o
o
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
Datastrukturer och algoritmer
n-länkad Cell
VT08

Tippel som består av
 ett värde
 n st länkar
Byggmaterial för andra datatyper
 n-länkad struktur

 Objekt konstruerade med n-länkade celler
o Listor, träd

Cell är en implementationsdetalj i ADT:en Lista som
kan gömmas för listans klient
 Cell kan alltså definieras i klassen som implementerar
listan (intern klass), deklareras privat behöver inte ha set
& get metoder
Datastrukturer och algoritmer
”1-Cell”
VT08
private class Cell
{
private Object data; //data portion
private Cell next; //link to next node
private Cell(Object dataPortion)
{
data = dataPortion;
next = null;
} //end constructor
private Cell(Object dataPortion, Cell NextCell)
{
data = dataPortion;
next = NextCell;
} //end constructor
} //end Cell
Datastrukturer och algoritmer
Cell används för positioner
VT08
private class Cell implements Pos
{
// se förra sidan för konstruktorer
public boolean eq(Pos p) {
if (((Cell)p).next == this.next)
return true;
else
return false;
}
}
Datastrukturer och algoritmer
Länk
VT08
 Referens,
pekare
 En fysisk datatyp i många språk
 Objekt
som refererar till annat objekt
 Konstrueras oftast som index i fält (kursor)
 Billigare kopiera länkar till objekt än objekten
själva
Datastrukturer och algoritmer
Dynamiska resurser
VT08
Skapar dataobjekt för tillfälliga behov
 Kill – lösgör resurser
 Create – reserverar resurser
 Vålnader

 döda celler som ”går igen”
 uppkommer om man dödar celler som det fortfarande
finns länkar till.
 använd Kill med försiktighet!

Sophämtning
 administrativ procedur
 identifierar och återvinner objekt som inte utnyttjas
(JAVA)