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