MasterShadows
Messages postés268Date d'inscriptionlundi 1 mars 2004StatutMembreDernière intervention19 avril 2012
-
18 nov. 2007 à 17:51
MasterShadows
Messages postés268Date d'inscriptionlundi 1 mars 2004StatutMembreDernière intervention19 avril 2012
-
19 nov. 2007 à 16:22
Bonjour à tous ,
alors voilà dans le cadre de mon tp de C je dois créer une liste simplement chainée tout ce qu'il y'a de plus générique.
donc on nous demande de créer ces méthodes, et la structure LISTE : donc cela donne :
/* Définition de la structure de liste */
typedef
struct LISTE* LISTE;
/* Définition du type ELEMENT */
typedef
void* ELEMENT;
/* Structure ITEM */
typedef
struct ITEM{
/* Item Suivant */
struct ITEM *pNext;
/* Element actuel */ELEMENT *pElement;
} ITEM;
/* Définition de ce qu'est la liste */
struct
LISTE{
/* Sentinelle de début de liste */ITEM *pStartSentinelle;
/* Element actuel */ITEM *pCurrentElement;
/* Nombre d'éléments dans la liste */
int Count;};
LISTE *creer();
void detruire(LISTE*liste);
int nbElements(LISTE*liste);
short estVide(LISTE*liste);
ELEMENT *valeurDe(LISTE* liste);
int supprimer(LISTE*liste)
int modifier(LISTE *liste, ELEMENT* elt);
int inserer(LISTE *liste, ELEMENT* elt);
int avancer(LISTE*liste);
short auBout(LISTE*liste);
short auDebut(LISTE *liste);
void allerEnTete(LISTE *liste);
void allerEnDernier(LISTE *liste);
------------------------ Les méthodes du dessus sont opérationnelles --------------------------------------------
int chercher(LISTE *liste, ELEMENT* elt, short(*idem)(ELEMENT *elt1, ELEMENT *elt2));
// Place le curseur sur l'élément de la liste qui vérifie la fonction idem() d'égalité entre l'élément actuel et elt.
// La ou les fonctions idem() seront définies dans le code utilisateur de la bibliothèque. Ces fonctions retournent la valeur 1 quand
// les éléments elt1 et elt2 sont jugées identiques, 0 sinon
void executer(LISTE*liste, void(*f)(ELEMENT*))
// demande l'exécution de la fonction f() sur tous les éléments de la liste. Le curseur ne change pas de valeur. La ou les fonctions
// f() seront définies dans le code de l'utilisateur de la bibliothèque.
Dans ma bib, ce sont ces 2 dernières méthodes que je ne comprends pas du tout. A quoi servent-elles ? pourrais-je avoir un exemple de ce type d'utilisation ?
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 19 nov. 2007 à 14:17
En fait je suppose que tu ne comprends pas short(*idem)(ELEMENT *elt1, ELEMENT *elt2) et void(*f)(ELEMENT*). Ce sont simplement des pointeurs sur des fonctions. Dans le premier cas, il s'agit d'une fonction de tri; dans le deuxième une fonction quelconque qui prend un ELEMENT* en paramètre.
Pour l'utilisation c'est très simple, je prends en ex. le premier cas :
short idem_int(ELEMENT*elt1, ELEMENT*elt2)
{
if(!elt1||!elt2) return 0;
return (*elt1==*elt2)1:0;
}
cette fonction doit comparer les deux éléments; son implémentation change en fonction du type sur lequel pointe un ELEMENT* (ici j'ai fait pour des int), c'est pour ca qu'on utilise ce système : on spécifie quelle fonction de comparaison utiliser lorsqu'on appelle chercher().
et après ta fonction chercher :
int chercher(LISTE *liste, ELEMENT* elt, short(*idem)(ELEMENT *elt1, ELEMENT *elt2))
{
ELEMENT* pElem=valeurDe(liste);
while(!idem(elt,pElem)) avancer(liste);
return 1;
}
bon faut encore rajouter des conditions d'arrêt mais tu vois le principe je pense.
Après pour l'utiliser c'est simple:
chercher(liste,elt,idem_int);