Contactmoment
8 maart
slides.com/jod/pt_maa_08
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Contactmoment 8 maart
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Onderwerpen:
- 9a. Lineaire datastructuren
- 9b. Gelinkte lijsten
- 9c. Stacks
- 9d. Queues
Uitsmijter om 9:50 : Vraagstukken
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
(1) Na testen van je programma blijkt dat de methode verwijderTiende zeer vaak opgeroepen wordt, en die methode wil je versnellen.
typedef struct {
int lengte;
double* waardes;
} Vector;
double verwijderTiende(Vector* v){
if(v->lengte<10) return 0;
double result = v->waardes[9];
v->lengte-=1;
// schuif alle volgende waardes eentje naar voor
for(int i=9; i<v->lengte; ++i){
v->waardes[i]=v->waardes[i+1];
}
return result;
}
verwijderTiende verwijdert het tiende getal uit een sequentie, en behoudt de volgorde van alle andere getallen. Je besluit een andere lineaire datastructuur te gebruiken. Welke kies je? Als de sequentie n getallen bevat, geef een ruwe schatting van het aantal operaties voor elke oproep van verwijderTiende met de andere lineaire datastructuur.
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
(2) Stel dat de methode niet verwijderTiende was, maar verwijderMiddelste, en de volgorde niet behouden hoeft te worden?
typedef struct {
int lengte;
double* waardes;
} Vector;
double verwijderMiddelste(Vector* v){
if(v->lengte==0) return 0;
int midden = v->lengte/2;
double result = v->waardes[midden];
v->lengte-=1;
// schuif alle volgende waardes eentje naar voor
for(int i=midden; i<v->lengte; ++i){
v->waardes[i]=v->waardes[i+1];
}
return result;
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
typedef struct node {
double d;
struct node *volgende;
} Node;
void verwijderVolgende(Node* n){
if(n==NULL || n->volgende==NULL){
return; // geen volgende
}else{
Node* teVerwijderen = n->volgende;
n->volgende = teVerwijderen->volgende;
free(teVerwijderen);
}
}
double verwijderTiende(Node* n){
for(int i=0; i<9 && n!=NULL; ++i){
n = n->volgende;
}
if(n==NULL || n->volgende==NULL) return 0;
double result = n->volgende->d;
verwijderVolgende(n);
return result;
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
typedef struct {
int lengte;
double* waardes;
} Vector;
double verwijderMiddelste(Vector* v){
if(v->lengte==0) return 0;
int midden = v->lengte/2;
double result = v->waardes[midden];
v->lengte-=1;
v->waardes[midden]=v->waardes[v->lengte];
return result;
}
Contactmoment 8 maart
By Jo Devriendt
Contactmoment 8 maart
- 541