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