maxlist-1. Indexerad lista Länkad lista

Save this PDF as:
 WORD  PNG  TXT  JPG

Storlek: px
Starta visningen från sidan:

Download "maxlist-1. Indexerad lista Länkad lista"

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

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

Läs mer

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 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

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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.

Läs mer

Föreläsning 6: Introduktion av listor

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.

Läs mer

TDDC76 - Programmering och Datastrukturer

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

Läs mer

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

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 +,

Läs mer

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ö 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

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

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

Läs mer

TDIU01 - Programmering i C++, grundkurs

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

Läs mer

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

Läs mer

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. 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

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

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

Läs mer

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 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

Läs mer

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. 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

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

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

Läs mer

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 / 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

Läs mer

Föreläsning REPETITION & EXTENTA

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

Läs mer

Länkade strukturer. (del 2)

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

Läs mer

Innehåll. Pekare Exempel

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.

Läs mer

OOP Objekt-orienterad programmering

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

Läs mer

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 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äs mer

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

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

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

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äs mer

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

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

Läs mer

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

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

Läs mer

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 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

Läs mer

Datastrukturer. föreläsning 3. Stacks 1

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

Läs mer

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 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

Läs mer

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

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

Läs mer

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

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

Läs mer

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. 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

Läs mer

Innehåll. Pekare Exempel

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.

Läs mer

Datastrukturer och algoritmer

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,

Läs mer

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 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

Läs mer

TDDC76 - Programmering och Datastrukturer

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.

Läs mer

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

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äs mer

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

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),

Läs mer

TDIU01 - Programmering i C++, grundkurs

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

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Läs mer

Föreläsning Datastrukturer (DAT036)

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

Läs mer

Programmering för språkteknologer II, HT2014. Rum

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

Läs mer

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

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:

Läs mer

Programmering B med Visual C++ 2008

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,

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

Läs mer

Dugga Datastrukturer (DAT036)

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

Läs mer

Tentamen, Algoritmer och datastrukturer

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

Läs mer

Dynamisk bindning och polymorfism

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

Läs mer

5 Arv och dynamisk bindning FIGUR

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

Läs mer

2 Modul 2 - (Länkade) Listor

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

Läs mer

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

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

Läs mer

Länkade strukturer, parametriserade typer och undantag

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

Läs mer

Föreläsning 12. Länkade listor

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

Läs mer

Föreläsning 10. ADT:er och datastrukturer

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

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

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

Läs mer

Övningar Dag 2 En första klass

Ö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

Läs mer

Föreläsning 8 Datastrukturer (DAT037)

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

Läs mer

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 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

Läs mer

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

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

Läs mer

*Pekarvärden *Pekarvariabler & *

*Pekarvärden *Pekarvariabler & * *Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)

Läs mer

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 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

Läs mer

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5 Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5? FORTSÄTTNING TRÄD RECAP (förra föreläsningen) RECAP (förra föreläsningen) Träd är icke-linjära datastrukturer som ofta

Läs mer

TDDC76 - Programmering och Datastrukturer

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

Läs mer

Föreläsning 7. Träd och binära sökträd

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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.

Läs mer

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

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 =

Läs mer

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Kurskod D0010E Datum 2012-05-15 Skrivtid 5tim

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

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och

Läs mer

Objektorienterad programmering D2

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

Läs mer

Föreläsning 11. ADT:er och datastrukturer

Föreläsning 11. ADT:er och datastrukturer Föreläsning 11 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

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

Laboration A Objektsamlingar

Laboration A Objektsamlingar Laboration A Objektsamlingar Avsikten med laborationen är att du ska träna på att använda ett par objektsamlingar. Uppgift 1 Titta genom föreläsningsunderlaget DA129AFAHT07.pdf och testkör exemplen (se

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap TDP004 Minne och pekare Eric Elfving Institutionen för datavetenskap 1 / 23 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 23 Internminne - RAM Datorns internminne (RAM,

Läs mer

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar KLASSER Inkapsling Abstrakt datatyp Public och private Klassmedlemmar Datamedlemmar Funktionsmedlemmar Initiering av objekt Konstruktor Ta del av objektets tillstånd Förändra objektets tillstånd Avinitiera

Läs mer

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. Denna tenta kommer att vara färdigrättad Må 24/10 och kan då hämtas på

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

Läs mer

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29 Programmering i C++ EDA623 Mallar EDA623 (Föreläsning 12) HT 2013 1 / 29 Mallar Innehåll Klassmallar Funktionsmallar EDA623 (Föreläsning 12) HT 2013 2 / 29 Containerklasserna vector, deque och list utgör

Läs mer

1 Klasser och objektorientering Vad är objektorientering?

1 Klasser och objektorientering Vad är objektorientering? 1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Initiering och tilldelning

Initiering och tilldelning Initiering och tilldelning Initiering och tilldelning Datatyper Inbyggda datatyper Abstrakta datatyper Konkreta datatyper Motiv för en mall för klassdefinitioner Exempel: "En (o)säker array" Konstruktor

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2 Föreläsning 4 ADT Map/Dictionary, hashtabeller, skip-listor TDDC91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 9 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 4.1

Läs mer

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

Datastrukturer och algoritmer

Datastrukturer och algoritmer Innehåll Datastrukturer och algoritmer Föreläsning 2 Fält Specifikation, Konstruktion och Specifikation, Konstruktion Dynamiska resurser Länk Länkade celler 25 26 Fält Modell Schackbräde Organisation n-dimensionellt

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla? 2004-05-10

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla? 2004-05-10 Djup/ytlig kopiering av containrar med erensobjekt Allmänt Om man inte vet hur många objekt man kommer behöva under exekvering så måste dynamiska lagringsstrukturer användas. stack, kö, lista, träd osv

Läs mer