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 ([email protected]) Ola Ringdahl ([email protected]) Håller i gruppövningar: Ola Ringdahl Linus Jonsson ([email protected]) Oskar Lindgren ([email protected]) Handleder och rättar obligatoriska uppgifter: Linus Jonsson Oskar Lindgren Johan Westerlund ([email protected]) 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)