Abstrakta datatyper Primitiva vektorer Deklarera en vektor

Abstrakta datatyper
Programmeringsmetodik A – mom 2
1
Primitiva vektorer
„
Vektorer kan skapas av primitiva datatyper,
objektreferenser eller andra vektorer.
Vektorer indexeras liksom i C från 0.
För att referera en vektor används hakparenteser.
„
vilket refererar 5:e elementet i vektorn height.
„
„
height[4]
Programmeringsmetodik A – mom 2
2
Deklarera en vektor
„
Vektorer är objekt i Java.
För att skapa en vektor måste därför en vektorreferens
deklareras.
„
Vektorreferenser kan också deklareras enligt:
„
Vektorreferensen kan inte ange längden av vektorn.
„
int[] v;
int v[];
Programmeringsmetodik A – mom 2
3
1
Allokera en vektor
„
Vektorer allokeras liksom andra objekt med new
„
Värdet som anger vektorlängden behöver inte vara en
konstant.
Konstanter är bra att använda för att beteckna
vektorlängder.
int[] v = new int[10];
„
static final int LIMIT = 10;
...
int[] v = new int[LIMIT];
Programmeringsmetodik A – mom 2
4
Initiera en vektor
„
Vektorer kan allokeras och initieras vid deklarationen
av vektorreferensen som i C.
int[] v = {65, 23, 91, 5, 10};
Programmeringsmetodik A – mom 2
5
Vektorer av objekt
„
Vektorer av objektreferenser kan också deklareras.
„
Observera att inga nya objekt ännu är deklarerade
eller minnesallokerade.
„
Metoder och attribut kan refereras direkt på
objektrefernsen.
Circle[] circles = new Circle[10];
circles[4] = new Circle(3.3);
circles[4].getRadius();
Programmeringsmetodik A – mom 2
6
2
Vektor som parameter
„
„
„
Vektorer kan skickas som argument.
Som argument kopieras inte vektorn utan
vektorreferensen.
Vektorelement går också utmärkt att skicka. Om
vektorn är av primitivt data, kopieras värdet. Om
vektorn är av objektreferenser, kopieras referensen.
Programmeringsmetodik A – mom 2
7
Kommandoradsargument
„
„
„
Till main-metoden skickas alltid eventuella
kommandoradsargument som argument.
Kommandoradsargument kan användas för att ange
extra information till programmet.
Varje argument angivet på kommandoraden blir ett
element i String-vektorn i main-metoden.
Programmeringsmetodik A – mom 2
8
Flerdimensionella vektorer
„
„
Liksom i C kan vektorer i flera dimensioner skapas.
Initieringen är lika enkel som endimensionella
vektorer.
int[][] = new int[3][9];
Circle[][][] = new Circle[3][3][3];
Programmeringsmetodik A – mom 2
9
3
Vector-klassen
Används för att representera dynamiska vektorer.
Kan växa efter behov.
Använder referenser till objekt (Object).
Indexeras från 0.
Var försiktig med hur den används.
„
„
„
„
„
Programmeringsmetodik A – mom 2
10
Vector-klassen
java.util.Vector
„
public Vector()
public Vector(int initialLength)
public void addElement(Object o)
public void insertElementAt(Object o, int index)
public void setElementAt(Object o, int index)
public boolean contains(Object o)
public void removeElement(Object o)
public void removeElementAt(int index)
public Object elementAt(int index)
public void clear()
public int size()
Programmeringsmetodik A – mom 2
11
Vector-klassen
Vector fruits = new Vector();
fruits.addElement("apple");
fruits.addElement("orange");
fruits.addElement("banana");
for (Enumeration e = fruits.elements();
e.hasMoreElements(); ) {
System.out.println(e.nextElement();
}
Programmeringsmetodik A – mom 2
12
4
Listor
„
„
„
„
„
„
Elementen är ordnade.
Element har värde.
Listan har en början och ett slut.
Kan vara tom.
All element kan observeras.
Element kan läggas in i listan på godtycklig plats.
Programmeringsmetodik A – mom 2
13
Listor
„
Vanligt gränssnitt
Funktionalitet
create
Beskrivning
insert
Lägger till element
isEmpty
Kollar om listan är tom
inspect
Inspekterar element
first
Första elementet
end
Sista elementet
previous
Föregående element
next
Nästkommande element
Skapa ny lista
Programmeringsmetodik A – mom 2
14
Listor
„
Element refereras oftast genom
‹
indexerade positioner (vektorbaserade och länkade listor)
‹
''elementbehållare'' som i sig utgör positionen (endast
länkade listor)
Programmeringsmetodik A – mom 2
15
5
Vektorbaserade listor
„
Fördelar:
„
Nackdelar:
‹
Att navigera och indexera listan går fort.
‹
Maximalt antal element (eventuellt).
‹
Att lägga till och ta bort element kan vara dyrbart.
Minnesåtgång beror på kapaciteten hos listan.
‹
Programmeringsmetodik A – mom 2
16
Länkade listor
„
Fördelar:
‹
‹
„
Lägga till och ta bort element är billigt.
Minnesåtgång beroende på antal element.
Nackdelar:
‹
‹
Navigation dyrt (billigare med dubbellänkad).
Mer komplex struktur.
Programmeringsmetodik A – mom 2
17
Iteratorer
„
„
Används för att navigera i en länkad lista
Flera kan användas samtidigt
Programmeringsmetodik A – mom 2
18
6
Stackar
„
„
„
Element kan enbart läggas till och tas bort på en (och
samma) position.
Endast ett element kan inspekteras.
LIFO strategi (Last In First Out)
Programmeringsmetodik A – mom 2
19
Stackar
„
Vanligt gränssnitt
Funktionalitet
create
Beskrivning
push
Lägger till element
pop
Tar bort översta elementet
top
Inspekterar översta elementet
isEmpty
Kollar om stacken är tom
Skapa ny stack
Programmeringsmetodik A – mom 2
20
Köer
„
„
„
Element läggs till i en ände och tas bort från den
andra änden.
Endast det främsta elementet kan inspekteras
FIFO strategi (First In First Out)
Programmeringsmetodik A – mom 2
21
7
Köer
„
Vanligt gränssnitt
Funktionalitet
create
Beskrivning
enqueue
Lägger till ett element sist
dequeue
Tar bort första elementet
front
Inspekterar första elementet
isEmpty
Kollar om kön är tom
Skapa ny kö
Programmeringsmetodik A – mom 2
22
Träd
„
„
„
„
„
„
„
„
Ett tomt träd har inga noder
Ett träd är tomt eller har exact en rot.
Varje nod (utom roten) har exact en förälder.
Varje nod har ett ändligt antal barn.
Noder med samma förälder kallas syskon.
Kopplingen mellan två noder kallas kant.
Djupet för en nod är samma som antalet kanter mellan
noden och roten.
Ett delträd består samtliga ättlingar till en nod n.
Programmeringsmetodik A – mom 2
23
Binära träd
„
„
I ett binärt träd har varje nod som flest två barn.
Traversera binära träd
‹
Rekursiva algoritmer
) Preorder
• Besök roten till aktuellt träd. Besök sedan vänstra
delträdet och till sist det högra.
) Inorder
• Besök först det vänstra delträdet och sedan roten och
till sist det högra delträdet.
) Postorder
• Besök först det vänstra delträdet och sedan det högra
delträdet och till sist rooten.
Programmeringsmetodik A – mom 2
24
8
Binärt sökträd (BST)
„
Sökträd är konstruerade speciellt för sökning.
Krav
„
Definition
„
‹
‹
‹
Det måste existera en linjär ordning av noderna.
Söknyckeln för nod n är större än alla söknycklar hos n's
vänstra delträd.
Söknyckeln för nod n är mindre än alla söknycklar hos n's
högra delträd.
Programmeringsmetodik A – mom 2
25
Binära sökträd
„
„
„
„
Det kan finnas flera representationer av samma träd.
En inorder traversering kommer att besöka noderna i
en sorterad ordning.
Algoritmernas hastighet för insättning, borttagande
och sökning är högst beroende av utseendet på trädet.
Balansera trädet.
Programmeringsmetodik A – mom 2
26
Grafer
„
„
„
„
Består av en uppsättning noder och kanter.
Två noder som är kopplade med en kant kallas
grannar.
Grafer kan vara osammanhängande.
Kanter kan vara riktade.
Programmeringsmetodik A – mom 2
27
9
Sökning i grafer
„
„
Två problem
‹
Att inte missa noder
‹
Att inte besöka en nod flera gånger.
Strategi
‹
Börja med en godtycklig nod. Testa alla kanter från alla
besökta noder. Kom ihåg vilka noder som är besökta.
Programmeringsmetodik A – mom 2
28
Sökning i grafer
„
Bredden först
‹
„
Testa alla kanter från den aktuella noden, innan du testar en
annan nod.
Djupet först
‹
Fortsätt så långt du kan från den aktuella noden innan du
testar dess andra kanter.
Programmeringsmetodik A – mom 2
29
10