Exercice 1: Algorithme et complexité Exercice 2: Tables de hachage

L3 IUP AISEM/ICM Examen Algorithmique et C 15 Avril 2005
Dur´ee 2h - Documents autoris´ees - Les exercices sont ind´ependants
Exercice 1: Algorithme et complexit´e
Soit un tableau de N entiers.
a. Donner un algorithme permettant de eterminer si les ´el´ements de ce tableau sont tri´es par
ordre croissant ou pas. Cet algorithme pourra ˆetre d´ecrit en pseudo-langage ou `a l’aide d’un
organigramme.
b. eterminer la complexit´e de votre algorithme, fonction de N, en nombre de comparaisons,
dans le pire des cas,
dans le meilleur des cas.
c. Ecrire une fonction en C impl´ementant cet algorithme. Pr´ecisez les donn´ees d’entr´ee et de
sortie de cette fonction.
Exercice 2: Tables de hachage
On souhaite stocker des nombres entiers positifs en utilisant une table de hachage. La table
poss´edant N emplacements (de 0 `a N-1), on utilise la clef suivante: h(x)=x modulo N.
a. Calculer la valeur de la cl´e pour chacun des ´el´ements de la liste suivante (N=12): 15, 24, 125,
4, 26, 6, 78, 55, 89
b. En supposant que les ´el´ements soient inclus dans la table de hachage dans l’ordre de la liste et
que la r´esolution des collisions soit faite en rajoutant un lien suivant `a chaque emplacement
de la table, dessiner la table obtenue. Remarque: Par convention un emplacemnt vide aura
pour valeur -1 et un lien suivant non utilis´e contiendra la valeur -1.
c. Proposez une impl´ementation en C d’un emplacement la table de hachage sous la forme d’une
structure.
d. La table est repr´esent´e par un tableau dynamique de structures (du type efini ci-dessus).
Ecrire le code en C d’une fonction permettant de cr´eer et d’initialiser une table de hachage.
Cette fonction aura pour entr´ee le nombre d’emplacements N de la table et pour sortie un
pointeur vers le premier emplacement de la table.
e. Donner l’algorithme et le code en C d’une fonction permettant de v´erifier si un ´el´ement x est
contenu dans la table.
Exercice 3: Arbres binaires
a. Dessiner le graphe de l’arbre binaire de recherche obtenu en ins´erant les ´el´ements de la liste
suivante dans leur ordre d’arriv´ee: 6, 78, 55, 89, 15, 24, 125, 3, 11
b. Un noeud d’un arbre binaire est repr´esent´e par la d´efinition de structure suivante:
typedef struct s_noeud
{ int valeur;
struct s_noeud* gauche;
struct s_noeud* droit;
} t_noeud;
Soit la fonction r´ecursive suivante:
void afficher(t_noeud* noeud)
{ if (noeud!=NULL)
{ afficher(noeud->gauche);
printf("%d \n",noeud->valeur);
afficher(noeud->droit);
}
}
L3 IUP AISEM/ICM Examen Algorithmique et C 15 Avril 2005
Donner ce qu’affiche `a l’´ecran cette fonction en partant du noeud de valeur 15.
eme question en partant de la racine de l’arbre pr´ec´edent. Dessiner sur le graphe le
parcours des sommets.
Exercice 4: Compl´ements de C
Donner, en le justifiant, l’affichage produit par le programme suivant:
#include <stdio.h>
void f1(int a, int * b) { a=*b;}
void f2(int * b, int c) { *b=c;}
void f3(int ** a, int b) {**a=b;}
void f4(int * a, int b) { f3(&a,b); }
int main()
{
int n1=5, n2=8, n3=10;
f1(n1,&n2);
printf("apres f1: n1=%d, n2=%d, n3=%d\n",n1,n2,n3);
f2(&n3,*(&n1));
printf("apres f2: n1=%d, n2=%d, n3=%d\n",n1,n2,n3);
f4(&n3,n2);
printf("apres f4: n1=%d, n2=%d, n3=%d\n",n1,n2,n3);
return 0;
}
Exercice 5: Structures de donn´ees - Files
On souhaite impl´ementer une file de nombres entiers de type FIFO `a l’aide d’une liste simplement
chaˆın´ee. Chaque ´el´ement de la file est repr´esenee par une structure d´efinie ainsi:
typedef struct s_element
{ int valeur;
struct s_element* suiv;
} t_element;
La file elle mˆeme est repr´esent´ee par la structure suivante:
typedef struct s_file
{ t_element *premier;
t_element *dernier;
} t_file;
dans laquelle le champ premier est un pointeur vers le premier ´el´ement de la file et dernier un
pointeur vers le dernier ´el´ement.
Pour manipuler la file, on souhaite ´ecrire 2 primitives:
une primitive inserer permettant d’inserer une valeur en derni`ere position de la file.
une primitive retirer permettant de supprimer le premier ´el´ement de la file en ayant pr´ealablement
renvoy´e sa valeur.
a. Dessiner une file (variable de type tfile) contenant les 4 ´el´ements suivants: 5, 22, 1, 8 (dans
l’ordre d’arriv´ee, du premier au dernier)
b. Dessiner la file pr´ec´edente apr`es l’insertion de l’´el´ement 12.
c. Dessiner maintenant la file apr`es l’ex´ecution de la primitive retirer et pr´eciser la valeur
renvoy´ee par la primitive.
d. Donner les entr´ees/sorties de la primitive ins´erer et en d´eduire l’ interface en C de la fonction
correspondante.
e. eme question pour la primitive retirer.
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !