Exercices sur l'algorithmique et la programmation - 3, Exercices de Applications informatiques
Christophe
Christophe3 March 2014

Exercices sur l'algorithmique et la programmation - 3, Exercices de Applications informatiques

PDF (128.4 KB)
2 pages
203Numéro de visites
Description
Exercices d’informatique sur l'algorithmique et la programmation - 3. Les principaux thèmes abordés sont les suivants: exercices.
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document

ENSEIRB 2009-2010 - Département informatique - Première année PG116 - Atelier algorithmique et programmation

Examen (session2) - durée 1h20

Documents de cours/td autorisés

Les trois exercices se basent sur la structure lelement donnée en annexe A (et vue en TD2) qui définit une cellule d’une liste châınée.

Exercice 1 (4 points)

Nous considérons connue une fonction de prototype int equals(void ∗, void ∗) qui indique si les deux pointeurs désignent des valeurs identiques 1.

Écrire une fonction de prototype int llm find(struct lelement ∗ l , void ∗ v) qui indique si la structure châınée l contient la valeur pointée par v.

Exercice 2 (10 points)

Une table de hachage peut représenter efficacement des ensembles munis des opérations d’ajout et de recherche. Elle fonctionne selon le principe suivant :

– On attribue à chaque valeur une clé qui sert d’index pour stocker la valeur dans un tableau. Ci-dessous, ”Tom Katz” a la clé 6 et ”Tony Balognie” a la clé 9.

– Deux valeurs distinctes peuvent avoir la même clé, comme ”Sarah Jones” et ”John Smith” ci-dessous qui partagent la clé 8. On parle alors de collision. Chaque case du tableau stocke donc la liste châınée des valeurs de même clé.

Nous considérons le fichier en-tête en annexe B. Nous supposons connues la fonction hash qui fournit la clé associée à une valeur, et la fonction equals qui indique si deux valeurs sont égales 1. Par convention, hash retourne une valeur comprise entre 0 et n−1.

1. Définir la structure hashtable qui met en œuvre la table de hachage par un tableau de listes châınées (utiliser la structure lelement en annexe A pour cela).

2. Donner le code des fonctions suivantes :

(a) hashtable init qui fournit une table de hachage vide dont le tableau a la capacité n.

1. Selon la convention usuelle : 0 pour faux et toute autre valeur pour vrai.

1

(b) hashtable find qui indique si une valeur est stockée dans la table de hachage 1. On utilisera la fonction llm find de l’exercice 1 pour la recherche dans une liste châınée.

(c) hashtable insert qui ajoute une valeur à la table de hachage. On rappelle que la table représente un ensemble.

(d) hashtable free qui libère la mémoire occupée par la table de hachage.

Exercice 3 (6 points)

Nous souhaitons paramétrer les types de données lelement et hashtable des deux exercices précédents pour qu’ils utilisent des fonctions hash et equals non plus fixées, mais adaptées aux valeurs stockées.

1. Déclarer une variable qui pointe vers la fonction equals et initialiser cette variable.

2. La fonction llm find doit être paramétrée en lui passant un pointeur sur une fonction equals. Modifier son prototype et son code en conséquence.

3. La table de hachage doit être paramétrée par des pointeurs sur des fonctions hash et equals. Modifier le code en conséquence tout en garantissant que pour une table de hachage donnée, toutes les opérations utilisent les mêmes fonctions hash et equals.

A lelement.h

#ifndef LELEMENT H #define LELEMENT H

struct l e l ement { void ∗ data ; struct l e l ement ∗next ;

} ;

struct l e l ement ∗ l lm in i t empty (void ) ; struct l e l ement ∗ l lm add head ( struct l e l ement ∗ , struct l e l ement ∗ ) ; int l lm i s empty ( struct l e l ement ∗ ) ;

#endif /∗ LELEMENT H ∗/

B hashtable.h

#ifndef HASHTABLE H #define HASHTABLE H

struct hashtab le ;

extern unsigned int hash (void ∗ , unsigned int n ) ; extern int equa l s (void ∗ , void ∗ ) ;

struct hashtab le ∗ h a s h t a b l e i n i t (unsigned int n ) ; int h a s h t a b l e f i n d ( struct hashtab le ∗ , void ∗ ) ; void h a s h t a b l e i n s e r t ( struct hashtab le ∗ , void ∗ ) ; void h a s h t a b l e f r e e ( struct hashtab le ∗ ) ;

#endif /∗ HASHTABLE H ∗/

2

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome