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 (kallin@cs.umu.se)
Ola Ringdahl (ringdahl@cs.umu.se)
Håller i gruppövningar:
Ola Ringdahl
Linus Jonsson (linusj@cs.umu.se)
Oskar Lindgren (oskarl@cs.umu.se)
Handleder och rättar obligatoriska uppgifter:
Linus Jonsson
Oskar Lindgren
Johan Westerlund (johanw@cs.umu.se)
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)