Datastrukturer och algoritmer
Föreläsning 2
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Innehåll
Listor
Specifikation, Konstruktion
Algoritmmönster
Riktade listor, länkade celler
Specifikation, Konstruktion
Dynamiska resurser
Datastrukturer och algoritmer
VT 2005
2
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Lista
Modell
Pärm
oBläddra, inspektera, lägga till, ta bort
Konstruktion
Dynamiskt med hjälp av länkade celler
Statiskt med hjälp av fält
Datastrukturer och algoritmer
VT 2005
3
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Lista
Diskret linjärt ordnad
Ä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
Datastrukturer och algoritmer
VT 2005
4
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Lista
Generisk datatyp (polytyp)
Lista av typ
oTyp kan vara av vilken typ som helst
Homogen datatyp
Alla element har samma typ
Datastrukturer och algoritmer
VT 2005
5
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Lista
Element
Värde och position
Struktur
Bortser från elementvärden
Position
Plats i strukturen
Datastrukturer och algoritmer
VT 2005
6
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Gränsyta till Lista
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
VT 2005
7
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Implementation av gränsyta till Lista
public interface List{
public boolean isEmpty();
public Pos insert(Object v, Pos p);
public Object inspect(Pos p);
public Pos first();
public Pos end();
public Pos next(Pos p);
public Pos previous(Pos p);
public Pos remove(Pos p);
}
Datastrukturer och algoritmer
VT 2005
8
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Implementation av gränsyta till Pos
public interface Pos {
public boolean eq(Pos p);
}
Datastrukturer och algoritmer
VT 2005
9
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Algoritmmönster
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
Datastrukturer och algoritmer
bestämt villkor
VT 2005
10
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Algoritmmönster
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
Datastrukturer och algoritmer
en lista med 4
VT 2005
11
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Konstruktion
Lista som Fält
+ Snabb inspektion av element
- Fast reserverat utrymme
- Kostsamt sätta in / ta bort element
Datastrukturer och algoritmer
VT 2005
12
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Konstruktion
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
Datastrukturer och algoritmer
Cirkulär eller linjär
VT 2005
13
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
n-länkad Cell
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
Datastrukturer och algoritmer
oListor, träd
VT 2005
14
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
”1-Cell”
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
Datastrukturer och algoritmer
} //end Cell
VT 2005
15
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Cell används för positioner
private class Cell implements Pos{
private Object value;
private Cell next;
Cell (){this(null,null);} //Create an empty cell
Cell (Object v, Cell n){//Create a cell with
value and reference
value = v;
next = n;
} //end Cell
public boolean eq(Pos p) {
if (((Cell)p).next== this.next) return true;
return false;
}
Datastrukturer och algoritmer
}
VT 2005
16
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Länk
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
Java: Inget objekt utan länk
Datastrukturer och algoritmer
VT 2005
17
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Gränsyta till Länk
Abstract datatype
Make
Nil
Isnil
Follow
Equal
Link (obj)
(x : obj) -> Link (obj)
( ) -> Link (obj)
(l : Link (obj)) -> Bool
(l : Link (obj)) -> obj
(l1,l2 : Link (obj)) -> Bool
Datastrukturer och algoritmer
VT 2005
18
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Länkad Lista
Länkar mellan elementen
Elementen är en cell som består av länkar
och värde
Dubbel eller enkellänkad
Datastrukturer och algoritmer
VT 2005
19
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Dubbellänkad lista
Före insättning
Datastrukturer och algoritmer
VT 2005
20
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
-Dubbellänkad lista
newNode skapas
Skapa ny nod för insättning
nodeBefore
nodeAfter
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
newNode
nodeBefore:s ”framåt” länk =
newNode
nodeAfter:s ”bakåt” länk =
newNode
Datastrukturer och algoritmer
VT 2005
21
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Dubbellänkad lista
Efter insättning och före borttagning
Datastrukturer och algoritmer
VT 2005
22
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Dubbellänkad lista
Ta bort ett element
nodeBefore
nodeToRemove
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
Datastrukturer och algoritmer
VT 2005
23
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Dubbellänkad lista
Efter borttagning
Datastrukturer och algoritmer
VT 2005
24
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Riktad Lista
Modell
Slalombana
Kan bara flytta sig framåt
Specialisering av Lista
Datastrukturer och algoritmer
VT 2005
25
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Riktad Lista
Previous och end behövs ej
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
Datastrukturer och algoritmer
VT 2005
26
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
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
VT 2005
27
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Riktad Lista
Konstruerad som
Fält
Dubbellänkad Lista
Enkellänkad Lista
Enkellänkad Lista
Mer ekonomisk
Datastrukturer och algoritmer
VT 2005
28
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Enkellänkad Lista
Problem vid insättning
Lösning:
Representera position mha en länk till
föregångarelementet
oFysisk och logisk referens
Listhuvud
oTomma objekt
Datastrukturer och algoritmer
oGränspositioner
VT 2005
29
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Enkellänkad Lista
Konstruktion utan huvud
Stopplänkvärde (nil, null)
Insättning före elementet X
oSkapa en ny cell
oSätt in den efter X
oKopiera X:s värde till den nya cellen
Datastrukturer och algoritmer
oSätt X:s värde till v
VT 2005
30
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004
Dynamiska resurser
Skapar dataobjekt för tillfälliga behov
Kill- lösgör resurser
Create - reserverar resurser
Vålnader
Sophämtning
Datastrukturer och algoritmer
VT 2005
31
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004