Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Relevanta dokument
Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Data- och programstrukturer

Tentamen Datastrukturer (DAT036)

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Symboliska konstanter const

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer D DAT 035/INN960

Dugga Datastrukturer (DAT036)

Abstrakta datastrukturer

Tentamen, Algoritmer och datastrukturer

Tentamen i Algoritmer & Datastrukturer i Java

Fredag 10 juni 2016 kl 8 12

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3. Stack

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer (DAT036)

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Föreläsning 9 Innehåll

Tentamen Datastrukturer (DAT036)

Föreläsning 3. Stack

Tentamen Datastrukturer för D2 DAT 035

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

Föreläsning Datastrukturer (DAT036)

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Tentamen Datastrukturer, DAT037 (DAT036)

DAI2 (TIDAL) + I2 (TKIEK)

TDDC30 Programmering i Java, datastrukturer och algoritmer

Föreläsning 4 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Länkade strukturer, parametriserade typer och undantag

Föreläsning 4 Innehåll

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Föreläsning 2. Stackar, köer och listor TDDC91,TDDE22,725G97: DALG. Innehåll. 1 ADT stack. 1.1 Tillämpningar

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Föreläsning 9 Datastrukturer (DAT037)

Tentamen ges för: Tentamensdatum: Tid:

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Programmering II (ID1019) :00-12:00

Lösningar Datastrukturer TDA

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 9 Innehåll

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Grundläggande programmering med C# 7,5 högskolepoäng

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Föreläsning Datastrukturer (DAT036)

Maskinorienterad programmering, IT2

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Datastrukturer, DAT037 (DAT036)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen kl Uppgift 4. Uppgift 5

Tillämpad Programmering (ID1218) :00-13:00

Föreläsning 14 Innehåll

Intro till standardbiblioteket. Eric Elfving

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

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

Datastrukturer. Föreläsning 5. Maps 1

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tommy Färnqvist, IDA, Linköpings universitet

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC30 Programmering i Java, datastrukturer och algoritmer

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Seminarium 13 Innehåll

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

TDIU01 - Programmering i C++, grundkurs

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Föreläsning 13 Innehåll

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

tentaplugg.nu av studenter för studenter

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen TEN1 HI

Träd. Rot. Förgrening. Löv

Transkript:

Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Omtentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: 2013-11-14 Tid: 09.00 13.00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: För att få respektive betyg krävs: G >= 22 VG >= 34 45 poäng Allmänna anvisningar: Numrera sidorna samt börja varje ny uppgift på nytt blad. Skriv personnummer på försättsblad och alla inlämnade sidor. Var tydliga, kortfattade och konkreta i era svar. Skriv tydligt (oläsligt = fel)! På programmeringsuppgifterna är principen viktigare än syntaxen. Poängavdrag kan ges för onödigt komplicerade eller ostrukturerade lösningar. Kommandon från bibliotek (även Roberts) får normalt användas fritt. Om du är osäker skriv ner vad kommandot förväntas göra. Inkluderingar behöver aldrig anges om det inte framgår av frågan. Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Anders Gidenstam Karl Jansson Telefonnummer: 033 435 4214 033 435 4399

1. Definiera följande begrepp och förklara kontexten de används inom: a. Lastfaktor (eng. load factor) b. Tidskomplexitet (eng. Computational complexity) c. Trädbalansering (eng. Tree-balancing) d. Hash funktion (eng. Hash funktion). (4p) 2. Betrakta följande rekursiva funktion: void RecursiveSubset(string str, string res) { if (!StringLength(str)) { printf("{%s}\n", res); } else { RecursiveSubset(str+1, Concat(res, CharToString(str[0]))); RecursiveSubset(str+1, res); } } void ListSubsets(string str) { int i = 0; RecursiveSubset(str, ""); } Visa i ord och bild hur resultatet av följande anrop till ListSubsets() beräknas. ListSubset("ABC"); En lämplig nivå är att visa vilka funktionsanrop som sker, deras argument och eventuella utskrifter. (2p) Beskriv i (c en mening den rekursiva idén bakom algoritmen ovan. (1p) c) Hur många anrop till RecursiveSubset()genereras av anropet ListSubset(str) för en sträng str av längd N. Du behöver inte nödvändigtvis finna ett slutet uttryck i strängens längd N, att generalisera fram ett mönster från små instanser är också ok. (2p) 2

3. En lövnod i ett binärt träd är en nod helt utan barn (dvs. med två tomma delträd). Antag att vi har en enkel implementation där ett träd är deklarerat enligt följande: typedef struct treet { int info; struct treet *left, *right; } *treet; Skriv en funktion med prototypen int countleaves(treet tree); som beräknar antalet lövnoder i trädet. 4. En prioritetskö (eng. priority queue) är en abstrakt samlingsdatatyp (ADT) med operationerna void Enqueue(pqueueADT pqueue, int newvalue) Sätter in angivet värde (newvalue) i prioritetskön. int DequeueMax(pqueueADT pqueue) Tar bort och returnerar elementet med högst prioritet i prioritetskön. Förklara i ord och bild hur man kan implementera en prioritetskö med Ett osorterad länkad lista (eng. unsorted linked list). Var ett nytt element läggs till är valfritt. En hög (eng. heap) (implementerad i en array som i laboration 2). Ange och förklara även respektive operations tidskomplexitet (worst-case) för båda implementeringarna uttryckt i antalet element i symboltabellen, N. Tips: En före och efter bild av hur datastrukturen ser ut i minnet med förklaring av ej uppenbara förändringar är en lagom nivå för att visa hur en operation fungerar, kod behövs inte. (8p) 3

5. En symboltabell (eng. dictionary) är en abstrakt samlingsdatatyp (ADT) med (bland annat) operationerna void Insert(symtabADT table, string key, void *value) Sätter in angivet nyckel, värde par (key, value) i symboltabellen. Om nyckeln redan finns så uppdateras det associerade värdet till value. bool Lookup(symtabADT table, string key, void **value) Slår upp nyckeln (key) i symboltabellen. Om nyckeln finns i symboltabellen placeras värdet (av typ void*) som hör ihop med den i minnesutrymmet som argumentet value pekar på och TRUE returneras. Om nyckeln inte finns i symboltabellen returneras FALSE. En möjlig implementation av en symboltabell är en sorterad enkellänkad lista. Nedan följer typdeklarationer för en sådan: typedef struct symtabcdt *symtabadt; typedef struct _cellt { string key; void *value; struct _cellt *next; } cellt; struct symtabcdt { cellt *first; }; void Insert(symtabADT table, string key, void *value) för en symboltabell implementerad som en sorterad enkellänkad lista i C. bool Lookup(symtabADT table, string key, void **value) för en symboltabell implementerad som en sorterad enkellänkad lista i C. Var noggrann med avseende på specialfall och minneshantering. Rita gärna strukturen på ett kladdpapper innan du skriver koden. 4

6. En dubbeländad kö (eng. deque) är en ADT som kan bete sig som en kö åt båda hållen, eller, mer lätt begripligt, båda ändarna beter sig som stack:ar, dvs. man kan lägga till och ta bort element i båda ändarna. Gränssnittet till en dequeadt är givet nedan. /* File: deque.h This interface defines a double-ended queue. /* Type: dequeelementt typedef double dequeelementt; /* Type: dequeadt typedef struct dequecdt *dequeadt; /* Function: NewDeque * Usage: deque = NewDeque(); dequeadt NewDeque(void); /* Function: FreeDeque * Usage: FreeDeque(deque); void FreeDeque(dequeADT deque); /* Function: PushLeft * Usage: PushLeft(deque, element); * This function pushes the specified element onto the left end of the deque. void PushLeft(dequeADT deque, dequeelementt element); /* Function: PushRight * Usage: PushRight(deque, element); * This function pushes the specified element onto the right end of the deque. void PushRight(dequeADT deque, dequeelementt element); /* Function: PopLeft * Usage: element = PopLeft(deque); * This function pops the leftmost element from the deque and returns * that value. If the deque is empty when PopLeft is called, * the function calls Error with an appropriate message. dequeelementt PopLeft(dequeADT deque); /* Function: PopRight * Usage: element = PopRight(deque); * This function pops the rightmost element from the deque and returns * that value. If the deque is empty when PopRight is called, * the function calls Error with an appropriate message. dequeelementt PopRight(dequeADT deque); /* Functions: DequeIsEmpty, DequeIsFull * Usage: if (DequeIsEmpty(deque))... * if (DequeIsFull(deque))... * This functions test whether the deque is empty or full. * A dynamic deque will never become full (since we assume the system memory * will never be exhausted). bool DequeIsEmpty(dequeADT deque); bool DequeIsFull(dequeADT deque); 5

Ett sätt att implementera en dubbeländad kö är med en dubbellänkad lista. Definitionen av dequecdt och de interna noderna av typen nodet blir då typedef struct _nodet { dequeelementt elem; struct _nodet *next; struct _nodet *prev; } nodet; struct dequecdt { nodet *leftend; nodet *rightend; }; Den dubbellänkade listan skall inte vara cirkulär utan kedjan av noder slutar vid första och sista noden. Således skall en tom dubbeländad kö representeras av frånvaron av noder. bool DequeIsEmpty(dequeADT deque); i C för dequecdt och nodet definitionerna ovan. (3p) bool PushLeft(dequeADT deque, dequeelementt element); i C för dequecdt och nodet definitionerna ovan. c) dequeelementt PopRight(dequeADT deque); i C för dequecdt och nodet definitionerna ovan. Var noggrann med avseende på specialfall och minneshantering. Rita gärna strukturen på ett kladdpapper innan du skriver koden. 6