maxlist-1. Indexerad lista Länkad lista
|
|
- Britt Jonasson
- för 8 år sedan
- Visningar:
Transkript
1 Datorer och programmering TDB2: Lista - en dynamisk datastruktur Eva Pärt-Enander Vad är en lista? En lista är en sekventiell struktur oftast av likadana saker. Listor denieras i C++ ofta med hjälp av klasser, men representationen (dvs vilka dataattribut klassen har) kan ske på olika sätt: Indexerad lista: Varje element åtkoms med ett index. Delvis knyckta delar av Olle Eriksson Statisk array. Längden bestäms under kompileringen. Dynamisk array. Längden bestäms under exekveringen. Dynamisk, tänjbar array. Kan växa och krympa under exekveringen. Länkad lista: Varje element åtkoms med hjälp av pekare från t ex föregående element. Kan växa och krympa under exekveringen Vad bör en lista klara av? maxlist-1 Vilka saker kan en lista göra? Nästan alltid vill man t ex kunna lägga till ett element eller söka om ett speciellt element nns i listan eller ej Indexerad lista En enkel lista bör klara av Tala om sin aktuella längd, dvs antalet listelement Länkad lista Tala om sin maximala kapacitet, dvs max antal element som listan kan ha. Ta bort alla element, dvs göra sig själv till tom lista. Ta bort ett element ur listan. Figur 1: Länkad lista. Lägga till ett nytt element, t ex sist. Indikera att ett element redan nns i listan eller ej. Indikera om listan är tom eller ej. 2 3
2 Array-baserad Olika sorters listor implementation av lista Ordnad lista: eller sorterad lista är en lista i vilken elementen ligger sorterade i stigande eller fallande ordning. Ex. Telefonkatalogen, olika kartotek. Stack: LIFO-struktur (Last In First Out), dvs den som kommer sist blir behandlad först. Ex. Olika former av travar, pappershögar och liknande. Kö: FIFO-struktur (First in First Out), dvs den som kommer först blir behandlad först. Ex. En lång rad konsumenter som hyser en Array-baserade listor representeras av tre delar: const int maxlist: en heltalskonstant som indikerar maximala antalet tillåtna element. int size: ett heltal som anger antalet element som nns vid ett visst tillfälle. int listitem[maxlist]: en array som kan ha maxlist antal heltalselement som mest. Tillåtna indexvärden i arrayen listitem är 0, 1,..., maxlist. gemensam längtan att träa producenten av en resurs. Att ta bort alla element i listan motsvaras av size = 0; Dock nns det dataelement kvar i arrayen, men i och med att size nollställts, så bildar de ingen lista. 4 5 Exempel på klassdeklaration för klassen SimpleList med statisk array: Traversera en lista const int maxlist = 25; class SimpleList private: int listitem[maxlist]; int size; public: SimpleList(); void clear(); void addtoend( int newitem ); void insert( int newitem ); void remove( int itemtogo ); int member( int anyitem ); int maximumcapacity(); int currentsize(); Antag att vi vill komma åt alla element i listan, då kan man iterera sig igenom listan med en loop. Denna process kallas för traversering. Exempel: for ( int i = 0; i < size; i++ ) access( listitem[i] ); där access symboliserar en godtycklig funktion med ett heltal som parameter eller någon sats som involverar listitem[i], t ex nollställande av element i konstruktorn eller utskrift i metoden write(). De esta programerare använder for-loop istället för while-loop då de traverserar en lista. int empty(); ; void write(); Om listan är tom, dvs size är 0, så kommer loopen ej att utföras. 6 7
3 Addera element till ordnad lista Addera element till en lista Processen att addera ett element till en lista beror på vilken sorts lista man har. Enklast är att lägga till element i slutet av en array-baserad lista. Antag sorterad i stigande ordning. Enklaste sättet att bibehålla ordnade strukturen är att stoppa in nya element på rätt plats direkt. (Jämför instickssortering.) Om detta görs i array-baserad lista, så måste vissa element skiftas ett steg. void SimpleList:: addtoend( int newitem ) Algoritm: Starta sist if ( size < maxlist ) listitem[size] = newitem; size++; 1. Starta med sista elementet i listan, dvs sätt indexpekaren current = size-1. Om detta element större än newitem så skifta ett steg åt höger till plats size, eftersom vi vet att den ändå måste ytta på sig. 2. Minska indexpekaren med 1. Fortsätt med vänster del-array. 8 9 void SimpleList:: insert( int newitem ) int current = size - 1; // Aktuellt index. // Leta efter rätt plats, skifta. while ( current >=0 listitem[current] > newitem ) listitem[current + 1] = listitem[current]; current--; // Nytt tal skall in efter. listitem[current + 1] = newitem; size++; // Öka listlängd. Antagandet har gjorts att listan inte är full, dvs size < maxlist. Ta bort ett element från en lista Processen att ta bort ett element ur en lista beror också på vilken sorts lista man har. I en stack lägger man till och tar bort element i ena änden, men i en kö lägger man till i ena änden, men tar bort från andra änden. Många andra listor kan ta bort element var som helst, beroende på elementvärden mer än på position i listan. Man måste först söka i listan för att hitta elementet som skall bort. För en array-baserad lista, så medför elementborttagande att vissa andra element måste skiftas (i motsatt riktning jämfört med att addera element till en lista)
4 void SimpleList:: remove( int itemtogo ) int psn = 0; // Position för nästa element // Sök efter elem. att ta bort while ( psn < size listitem[psn]!= itemtogo ) psn++; // Om elementet funnet. if ( psn < size ) for ( int i = psn; i < size-1; i++ ) listitem[i] = listitem[i+1]; // Skifta. size--; // Minska listan. Sortering och sökning Ordnade listor behöver inte sorteras de är redan sorterade. Många listor är osorterade, men sorteras om man så behöver. Bra att känna till följande sorteringsalgoritmer: Instickssortering. Urvalssortering. Bubbelsortering. Bra att känna till följande sökningsalgoritmer: Lineär sökning. (Oordnad datamängd). Binär sökning. (Ordnad datamängd) Exempel på huvudprogram som använder SimpleList: int main() SimpleList list; list.insert( 34 ); list.insert( 27 ); list.remove(55); list.insert( 345 ); list.insert( 58 ); if ( list.empty() ) cout << "Tom lista!!!" << endl; list.write(); list.clear(); list.write(); return 0; ger följande körning: SimpleList another; another.insert( 55 ); another.insert( 78 ); another.insert( 15 ); Antal element är 4: Antal element är 0. Antal element är 3: Tom lista!!! list = another; list.write(); list.remove(15); list.remove(78); 14 15
5 Metodimplementation för övriga metoder/konstruktorer: SimpleList:: SimpleList() : size(0) for ( int i = 0; i < maxlist; i++ ) listitem[i] = 0; int SimpleList:: maximumcapacity() return maxlist; void SimpleList:: clear() size = 0; int SimpleList:: currentsize() return size; int SimpleList:: member( int anyitem ) for ( int i = 0; i < size; i++ ) if ( listitem[i] == anyitem ) int SimpleList:: empty() return (size == 0); // 1 om tom, annars 0. return 1; // TRUE return 0; // FALSE void SimpleList:: write() Avancerad listklass med dynamisk tänjbar array cout << "Antal element är " << size; if (!empty() ) cout << ":"; Man skulle i SimpleList kunna ha en dynamisk array listitem istället för statisk: private: int *listitem; int maxlist; for ( int i = 0; i < size; i++ ) int size; cout << \t << listitem[i]; else cout << "."; cout << endl; I princip kan allt vara som förut, men man allokerar och avallokerar minne i konstruktorer respektive destruktorn. Dessutom byts const int maxlist = 25; i header-len mot att användaren t ex ger värdet för attributet maxlist. Vinsten är inte så stor om man inte gör arrayen tänjbar
6 En tänjbar array upptar alltid precis så mycket minne som behövs. Den kan växa eller krympa om t ex: användaren skickar ett meddelande om detta. Meddelandet innehåller nya längden. den tilldelas en annan tänjbar array. Dess nya längd blir längden på det som tilldelades. man adderar eller tar bort element. Vi skall studera klassen ExtArray (extensible array) lite närmare nu: class ExtArray private: Först en liten varning: Kom ihåg att det här med pekare som attribut inte är enkelt! Pekare och arrayer är relaterade till varandra, men de är inte samma sak! Så fort man har med pekare att göra så måste man vara försiktig, eftersom det lätt blir konstiga fel annars. T ex pekare som pekar fel, tappar bort vad de pekar på eller konstiga kopieringar av data som sker, etc. int *array; // Dynamisk array. int bufsize; // Aktuella längden. public: Frågor: Vad händer om: Tilldelningsoperatorn (=): man gör delete [] på ena pekarvärdet? Den inbyggda tilldelningsoperatorn fungerar utmärkt för varianten räckvidderna (scope) är olika stora för objekt1, objekt2? objekt1 = objekt2; då motsvarande klass inte innehåller pekarattribut. Datavärde för datavärde kopieras då över från objekt2 till objekt1. Botemedel: Man skriver en egen tilldelningsfunktion, t ex: void ExtArray:: assign( const ExtArray a ); Om vi har pekare, som i klassen ExtArray, så innebär objekt1 = objekt2; att även pekarna kopieras direkt! Dvs pekarna i objekt1 och objekt2 pekar ut samma data (samma minnesutrymme), så om man senare ändrar i objekt2:s array, så sker samma ändring i objekt1:s array, fast man troligen inte ville det! S k grund kopiering (ej fullständig, ickedjup, attributkopiering, shallow copy). dvs tilldelningen: objekt1.assign( objekt2 ); fungerar då rätt om man implementerar assign så att den skapar en helt egen kopia av arrayen genom att kopiera element för element, s k djup kopiering (fullständig, deep copy). Om -tecknet glöms så måste en egen kopieringskonstruktor nnas, annars blir det fel i allafall... const medför att objekt2 ej kan förstöras/ändras i metoden
7 Kopieringskonstruktorn Alternativt botemedel: Skriv en överlagrad tilldelningsoperator så att objekt1 = objekt2; innebär djup kopiering. Deklareras i stil med det här: Det nns en inbyggd kopieringskonstruktor i C++ som automatiskt används vid vissa tillfällen fast man inte tänker på det. Allt fungerar bra så länge som man inte har pekare bland attributen. Kopieringskonstruktorn anropas då man const ExtArray ExtArray:: operator= ( const ExtArray a ) initierar objektvariabler, vid ickereferensparameteröverföring till funktioner eller när man returnerar objektvärden från funktioner. :- Inte helt trivialt med C++... :-0 Både den inbyggda kopieringskonstruktorn och tilldelningsoperatorn gör alltså grund kopiering! Botemedel: Man skriver en egen kopieringskonstruktor som kopierar elementvis (dvs djupt). Kod för hela klassen ExtArray + main + körning: // Extensible array. Tänjbar array. const int blank = 0; ExtArray( const ExtArray a ); medför att t ex ExtArray arr2; // default. ExtArray arr3 = ExtArray( 2, -99 ); //överlagra ExtArray arr4(arr3); // kopierings. ExtArray arr5 = arr2; // kopierings. fungerar! class ExtArray private: int *array; int bufsize; public: ExtArray(); ExtArray( int siz, int val ); ~ExtArray(); ExtArray( const ExtArray a ); Summering: Om man har pekare som attribut, så bör man alltså ha egendenierad void change(int i, int num); int size(); void resize( int n ); destruktor, kopieringskonstruktor, tilldelningsoperator/metod. void assign( const ExtArray a ); ; void write(); void addtoend( int newitem ); 26 27
8 int main() ExtArray arr1( 5, -1 ); // 5 element, -1:or ExtArray arr2; // 0 element. ExtArray arr3 = ExtArray( 2, -99 ); ExtArray arr4(arr3); // kopiering.. ExtArray arr5 = arr2; // kopiering.. cout << "arr1: "; arr1.write(); cout << "arr2: "; arr2.write(); cout << "arr3: "; arr3.write(); cout << "arr5: "; arr5.write(); cout << "Tilldela arr1 = arr3:" << endl; // arr1 = arr3; // Kopierar ickedjupt!!! arr1.assign( arr3 ); // OKAY. cout << "arr1: "; arr1.write(); cout << "arr2: "; arr2.write(); cout << "arr3: "; arr3.write(); cout << "arr1: "; arr1.write(); cout << "arr2: "; arr2.write(); cout << "arr3: "; arr3.write(); cout << "arr3: byt värden till 11 och 22..." << endl; arr3.change(0,11); arr3.change(1,22); Körning ger: cout << "arr3: ändra längd dessutom" << endl; arr3.resize(6); cout << "arr1: "; arr1.write(); cout << "arr2: "; arr2.write(); cout << "arr3: "; arr3.write(); cout << "Lägg till element 22, 33 på " << "slutet i arr2, arr3:" << endl; arr2.addtoend( 22 ); // Nytt element sist arr3.addtoend( 33 ); // Nytt element sist cout << "arr1: "; arr1.write(); cout << "arr2: "; arr2.write(); cout << "arr3: "; arr3.write(); return 0; Hello överlagrad 5 Hello default 0 Hello överlagrad 2 Hello kopiering: ny längd: 2 Hello kopiering: ny längd: 0 arr1: Antal element är 5: arr2: Antal element är 0. arr3: Antal element är 2: arr4: Antal element är 2: arr5: Antal element är 0. Tilldela arr1 = arr3: Hello assign 2 arr1: Antal element är 2: arr2: Antal element är 0. arr3: Antal element är 2: arr3: byt värden till 11 och arr1: Antal element är 2: arr2: Antal element är 0. arr3: Antal element är 2: arr3: ändra längd dessutom arr1: Antal element är 2: arr2: Antal element är
9 arr3: Antal element är 6: Lägg till element 22, 33 på slutet i arr2, arr3: arr1: Antal element är 2: arr2: Antal element är 1: 22 arr3: Antal element är 7: Implementation av metoder för dynamisk tänjbar arrayklass: ExtArray:: ExtArray() : bufsize(0) array = 0; //NULL-pekaren cout << "Hello default " << bufsize << endl; ExtArray:: ExtArray( int siz, int val ) : bufsize(siz) if ( bufsize > 0 ) else array = new int[bufsize]; for ( int i = 0; i < bufsize; i++ ) array[i] = val; cout << "Hello överlagrad " << bufsize << endl; array = 0; //NULL-pekare ExtArray:: ExtArray( const ExtArray a ) : bufsize(a.bufsize) cout << "Hello kopiering: ny längd: " << bufsize << endl; void ExtArray:: resize( int n ) int *p = 0; if ( n > 0 ) // Om ny storlek ej är noll // Skapa array med n elem. // Fyll med element. if ( bufsize > 0 ) // Fyll resten med blanka. p = new int[n]; // Allokera nytt minne. // Kopiera element för element. array = new int[bufsize]; for ( int i = 0; i < bufsize; i++ ) array[i] = a.array[i]; int i; for ( i = 0; i < n i < bufsize; i++ ) p[i] = array[i]; else array = 0; //NULL for ( ; i < n; i++ ) p[i] = blank; ExtArray:: ~ExtArray() delete [] array; // Avallokera. array = p; // Sätt array. delete [] array; bufsize = n; // Sätt bufsize
10 int ExtArray:: size() return bufsize; void ExtArray:: write() cout << "Antal element är " << bufsize; if ( bufsize > 0 ) cout << ":"; for ( int i = 0; i < bufsize; i++ ) cout << \t << array[i]; else cout << "."; cout << endl; void ExtArray:: assign( const ExtArray a ) // Tilldela: aktuella objektet = a. bufsize = a.bufsize; cout << "Hello assign " << bufsize << endl; if ( bufsize > 0 ) // Frigör minne. // Allokera nytt minne. // Kopiera elementen delete [] array; array = new int[bufsize]; for ( int i = 0; i < bufsize; i++ ) array[i] = a.array[i]; else array = 0; //NULL void ExtArray:: addtoend( int newitem ) // Öka på arrayen med ett element till. resize(bufsize+1); // Fixar även bufsize++; Överkurs Pekarbaserad implementation av lista Vad är en länkad lista? first // Tilldela sista elem., dvs plats bufsize-1: array[bufsize-1] = newitem; void ExtArray:: change(int i, int num) if ( i < bufsize ) array[ i ] = num; link link link Figur 2: Länkad lista. Består av ett antal noder eller listelement. Värdet kan vara av vilken typ som helst (int, double, klasstyp,...) Implementeras vanligen som objekt som binds samman med pekare
11 Varje nod har två komponenter: värde samt en pekare till nästa element i listan. Har en början och ett slut. ett När en nod behövs så skaar vi en ny med hjälp av new och lägger in den i listan. Listans första element kallas listans huvud. Det brukar pekas ut av en speciell pekare. (Vi kallar den first). Det sista elementet har en tom pekare, dvs pekarvärde = 0 (NULL). Den markerar att listan är slut. Om man inte behöver noden så kan den återvinnas med delete. Då måste vi förstås trassla loss den ur listan först annars blir det inte så bra. Varför ha en länkad lista? Är enkelriktad. (Man kan ha dubbellänkade listor också...) Element kan tas bort och läggas till var som helst utan att andra element behöver yttas. Dynamisk växer fram vartefter den behövs; kan krympa och växa med tiden. Har aldrig någon bestämd maximal storlek. Fördelar: Mer dynamiskt än en array. Lätt att lägga till och ta bort saker. Kan hållas sorterad utan att noder behöver yttas. Ingen fast storlek Vad bör en länkad lista klara av? Nackdelar: Svårare att hitta en viss nod eftersom de inte numreras utan vi måste söka från början. Är en sekventiell struktur där vi bara kan gå framåt. Det nns varianter där vi kan backa också men det ändrar inte så mycket. En nod blir större än motsvarande arrayelement eftersom en pekare måste nnas. Andelen pekare i noden beror ju på hur resten ser ut. Om vi har en lista av tecken kommer 80 av listan att vara pekare, men om informationsdelen är större så minskar problemet. Vi har redan sett exempel på vilka operationer man önskar göra på listor (implementerad med en array). Samma saker vill vi nu kunna göra med länkade listor. En enkel lista bör klara av Skapa tom lista. Ta bort alla element, dvs göra sig själv till tom lista. Ta bort ett element ur listan. Lägga till ett nytt element, t ex sist. Indikera att ett element redan nns i listan eller ej. Indikera om listan är tom eller ej....etc. Detaljer kommer i OOP/C++-kursen! 42 43
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings
TDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33
Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation
Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor
Abstrakta datatyper 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.
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Klasser - speciella medlemsfunktioner Eric Elfving Institutionen för datavetenskap En klass ansvarar ofta för en resurs. Ibland är resursen så enkel som en datamedlem
Föreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.
KAPITEL 8 Klasser Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering. 169 Hittills: Enkel datatyp: double, int, char Operationer: förutbestämda, t ex +,
Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta
Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34
Programmering i C++ EDAF30 Dynamiska datastrukturer EDAF30 (Föreläsning 11) HT 2014 1 / 34 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd Säkrare minneshantering (shared_ptr och unique_ptr)
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander
F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder
Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad
1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen
Datorer och programmering TDB2: Aggregat Eva Pärt-Enander Aggregat i C++ Kan också kallas komposition. En klass eller objekt är uppbyggd av andra klasser eller objekt. En klass har attribut av andra, redan
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp
Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser
Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder
Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i
Tentamen i Algoritmer & Datastrukturer i Java
Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng
Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31
Programmering i C++ EDA623 Dynamiska datastrukturer EDA623 (Föreläsning 11) HT 2013 1 / 31 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd EDA623 (Föreläsning 11) HT 2013 2 / 31 Länkade
6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:
6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Föreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet
Länkade strukturer. (del 2)
Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion
public och private Obs: private inte skyddar mot access från andra objekt i samma klass.
public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private
Föreläsning REPETITION & EXTENTA
Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder
Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER
Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Från laboration 3 till 4 I laboration 3 har du implementerat klasser implementerat metoder i klasserna I laboration 4 kommer du att implementera
Minnestilldelning (allokering) och frigörande (avallokering) av minne
Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på
Föreläsning 4 Innehåll
Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar
OOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 2 Karl Palmskog palmskog@kth.se september 2010 Specalfunktioner i klasser Konstruktorer i konstruktorerna för en klass initieras klassens medlemmar initialvärden
Den som bara har en hammare tror att alla problem är spikar
Introduktion Föreläsning (Weiss kap. -4) Många begrepp blir det Introduktion till kursen Exempel: Datastrukturen mängd Generiska Den som bara har en hammare tror att alla problem är spikar Vilken
Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare
Vad är en pekare? Varför använder vi pekare? Hur används pekare? Hur deklarerar vi pekare i C? Hur kommer vi åt pekarvärdet? DAVA07/08 JE,MG,MG,PS 2 DAVA07/08 JE,MG,MG,PS Vad är en pekare? En pekare är
1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.
1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som
Datastrukturer. föreläsning 3. Stacks 1
Datastrukturer föreläsning 3 Stacks 1 Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som
Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB
Arrayer (vektorer) Murach s: kap 8 2013-01-15 1 Elektronikcentrum i Svängsta AB Arrayer Arrayer (vektorer) Ofta i ett program har vi flera variabler av samma datatyp som är relaterade till varandra. Exempel
Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar
Dynamiskt minne Agenda Vad är dynamiskt minne Motivering Hur gör man i C Övningar Minne Datorns primärminne används till olika ändamål De flesta system partitionerar minnet efter användningen: Programkoden
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Sammansatta datatyper Generics: Parametrisk polymorfism
jonas.kvarnstrom@liu.se 2017 Sammansatta datatyper Generics: Parametrisk polymorfism Listor och arrayer 2 Enligt TDDD73: Många språk har både listor och arrayer även Java och Python! Exakta definitioner
Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:
Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att
Lösningsförslag till tentamen Datastrukturer, DAT037,
Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-04-05 1. q.dequeue() tar O(1) (eventuellt amorterat) s.contains(x) tar O(1) pq.add(x) tar O(log i) I värsta fall exekveras innehållet i if-satsen.
Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv
Programsystem konstruktion med C++ (2D1387) övning 2 klasser och arv Ronnie Johansson rjo@nadakthse grupp 4 2003 09 25 Innehåll Klasskonstruktorer och initieringslistor Klassdestruktorer Åtkomstkontroll
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
Sökning och sortering
Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får
Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4
Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig
Datastrukturer och algoritmer
Innehåll Datastrukturer och algoritmer Föreläsning 2 Listor Specifikation, Konstruktion Algoritmmönster Riktade listor, länkade celler Specifikation, Konstruktion Dynamiska resurser 24 25 Modell Pärm Bläddra,
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på både fram- och
Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.
Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer
Länkade strukturer, parametriserade typer och undantag
Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer
Intro till standardbiblioteket. Eric Elfving
Intro till standardbiblioteket Eric Elfving 1 Behållare (containers) 2 Iteratorer 3 Algoritmer 15 mars 2018 2 / 13 Bibliotekets behållare delas in i tre grupper: Sekevensbehålare (Sequence containers)
Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista
Sökning och sortering Sökning i oordnad lista Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man mycket data
2 Modul 2 - (Länkade) Listor
2 Modul 2 - (Länkade) Listor 2.1 Jämförelse mellan "verkliga" och "virtuella" listor Verklig Ta ett blankt papper Skriv en punkt Lägg till fler punkter Läser vad som står vid en punkt Stryker över/suddar
ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack
Stack och Kö -Implementering - Tilllämpningar ADS : STACK Det finns ett par vanligt förekommande ADT:er för samlingar av element som egentligen är specialfall av listor. En av dem är Stack Definition:
Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:
8. Objektorientering Skälet till att C++ är ett av de mest använda programspråken är att det är objektorienterat. Detta bygger vidare på begreppet struct (ursprungligen från språket C som inte är objektorienterat),
Föreläsning 8 Datastrukturer (DAT037)
Föreläsning 8 Datastrukturer (DAT037) Fredrik Lindblad 1 22 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Programmering för språkteknologer II, HT2014. Rum
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer
Tentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Dynamisk bindning och polymorfism
Dynamisk bindning och polymorfism I C++ är pekare till basklasser polymorfa, dvs de kan peka på objekt av en subklass typ Vid statisk bindning sker all bindning vid kompileringen -> Vid ett metodanrop
Föreläsning 3-4 Innehåll
Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå
Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Föreläsning 2. Länkad lista och iterator
Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF
5 Arv och dynamisk bindning FIGUR
5 Arv och dynamisk bindning Arv är en av hörnstenarna i objektorienterad programmering. Med hjälp av arv kan man skapa underhållsvänliga och förändringsvänliga system. Att hitta arvsrelationer är en viktig
Tentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
Föreläsning 12. Länkade listor
Föreläsning 12 Länkade listor Jämför en array med en länkad lista m in n e t Array (med 5 element): + effektiv vid hämtning - ineffektiv vid insättning och borttagning Länkad lista (med 5 element): + effektiv
Dugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv
Kapitel 2 Klasser Medlemmar Arv, medlemmar och arv Klasser, åtkomst Medlemmar, medlemsfunktioner, inline och destruktorer this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner
Tentamen ID1004 Objektorienterad programmering October 29, 2013
Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.
ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition
Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue
Föreläsning 10. ADT:er och datastrukturer
Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad
Föreläsning 4 Datastrukturer (DAT037)
Föreläsning 4 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-10 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne
Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.
(1 oktober 2017 F5 1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser Arbetsexempel (1 oktober 2017 F5 2 ) Pokertärningar
DAT043 - föreläsning 8
DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016
Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private
Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall
Datalogi, grundkurs 1. Lösningsförslag till tentamen
Datalogi, grundkurs 1 Lösningsförslag till tentamen 6 maj 2000 1. För att proceduren sortera ska fungera som tänkt kan den se ut på följande sätt: const min = 1; max = 3; type tal = integer; index = min..max;
Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.
(16 februari 2016 F5.1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser Arbetsexempel (16 februari 2016 F5.2 ) Pokertärningar
Objektorienterad programmering D2
Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne
2 Pekare och dynamiska variabler.
2 Pekare och dynamiska variabler. När man definierar en variabel reserverar man samtidigt minne för variabelns värde. Detta minnesutrymme kommer man sedan åt med hjälp av variabelns namn. Definierar man
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-13 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får
Fredag 10 juni 2016 kl 8 12
KTH CSC, Alexander Baltatzis DD1320/1321 Lösningsförslag Fredag 10 juni 2016 kl 8 12 Hjälpmedel: En algoritmbok (ej pythonkramaren) och ditt eget formelblad. För betyg E krävs att alla E-uppgifter är godkända,
Kurskod D0010E Datum 2012-05-15 Skrivtid 5tim
LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, 491000, 073-820 1700 Resultatet o entliggörs senast: 2012-05-29. Tillåtna
Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer
Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering
Övningar Dag 2 En första klass
Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt
Abstrakta datatyper Laboration 2 GruDat, DD1344
Abstrakta datatyper Laboration 2 GruDat, DD1344 Örjan Ekeberg (fritt från en idé av Henrik Eriksson) 27 oktober 2008 Målsättning Målet med denna laboration är att ge en inblick i hur man kan använda abstrakta