TDP004 Objektorienterad programmering
Förberedelseuppgifter Minneshantering och pekarstrukturer
Följande uppgifter handlar om pekare och hur de kan användas för att skapa länkade strukturer, samt hur klasser kan användas för att underlätta minneshantering.
Uppgift 1
Skriv den kod som behövs för att beskriva följande figur:
I figuren pekar "first" på noden, och nodens "next" pekar på noden själv.
Uppgift 2
Givet figuren i uppgift (1) körs följande kod:
(*first->next).next->value = 10;
(*first->next).next->next = nullptr;
Förklara vad som händer när koden körs och hur samma sak går att göra med enklare kod.
Uppgift 3
Skriv den kod som behövs för att figuren i uppgift (1) skall bli som följer.
I figuren pekar "first" på noden som har "value"=5 och den nodens "next" pekar i sin tur på noden med "value"=9 som i sin tur har "next"=nullptr.
Utgå ifrån attNode har en konstruktor Node(Node* next, int value).
Uppgift 4
Skriv den kod som behövs för att figuren i uppgift (3) skall bli som följer.
Förenklat ritar vi ovan figur som följer:
I den förenklade figuren har vi även lagt noderna i den ordning som gör att figuren framstår som enkel (hur noderna egentligen ligger i minnet har vi abstraherat bort).
Uppgift 5
Utgå från den förenklade figuren i uppgift (4) men antag att antalet noder är okänt.
Skriv en while-loop som letar upp sista noden (den med next == nullptr). Efter
while-loopen skall adressen till sista noden finnas i en pekarvariabel.
Uppgift 6
Utgå från den förenklade figuren i uppgift (4) och följande funktion:
void insert(Node* n, int i)
{
n = new Node(n->next, i);
}
Förklara vad som händer när följande kod kör och hur det ser ut efteråt:
insert(first, 2);
I denna uppgift gäller det att noga rita upp vad som händer för att få fram korrekt slutresultat.
Uppgift 7
Rita en figur som visar resultatet av följande kod:
int* data[3];
for (int i = 0; i < 3; ++i)
{
data[i] = new int(i);
}
Tips: Deklarationer med pekare läses bäst baklänges.
T.ex. kan "int* data[3]" läsas ut som "skapa en lista med storlek 3
som heter 'data' och lagrar pekare till heltal".
Uppgift 8
Antag att en Node i uppgift 4 har en destruktor:
Node::~Node()
{
delete next;
}
Visa steg för steg vad som händer när satsen "delete first" körs på strukturen i uppgift 4?
Sidansvarig: Eric Ekström
Senast uppdaterad: 2025-10-22
