Problème avec liste chainée

[Résolu]
Signaler
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
-
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
-
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 ?

Merci d'avance...

2 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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);
Messages postés
268
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
11
merci c'est ce que je cherchais