Bonjour J'ai récemment posé des questions sur les listes liées à C.
The link was found hereComment écrire une fonction dans une fonction (list_map)
D'abord, je tiens à remercier tout le monde pour me aider avec cela. Mais j'ai un problème que je ne peux pas comprendre. J'ai même demandé au professeur mais il m'a envoyé un courriel avec peu d'informations. Fondamentalement, j'écris une liste liée en C (voir lien ci-dessus). L'une des choses que le professeur nous donne dans le fichier d'en-tête est la suivante:
void list_map(INTLIST *list, void (*f)(void *));
/*Applies a function to each element of the list */
Alors je lui ai envoyé un courriel à ce sujet et dit:
Une autre question, dans le fichier d'en-tête que vous n'avez pas défini le tri fonction, avons-nous besoin d'écrire une fonction de tri avec le prototype et enfin ce qui est list_map
et il m'a répondu avec:
Vous êtes invité à implémenter une fonction de tri f, appelée via list_map (list, f). J'espère que cela efface vos doutes.
Mes seuls doutes sont ce n'était pas entièrement enseigné. Je peux comprendre comment trier la liste chaînée en fait un code de pseudo ici:
tmp=head;
while(tmp!=NULL)
{
tmp2=tmp->next; //pointer to next node
while(tmp2!=NULL)
{
if (tmp2->data < tmp->data)
{
int x = tmp2->data;
tmp2->data = tmp->data;
tmp2->data = x;
}
tmp2=tmp2->next;
}
tmp=tmp->next;
}
Je sais que les experts pourraient dire que ce ne sont pas les plus efficaces, et je comprends que je suis en ce moment en train d'apprendre et d'essayer de faire fonctionner les choses. Je peux nettoyer après les mots ... ainsi de suite à ma question.
Ma question est donnée J'ai la fonction de tri (dans le cas du professeur il l'appelle f). Comment puis-je appeler cette fonction de tri lorsque la signature est:
void list_map(INTLIST* list, void (*f) (void*));
Est-ce que je peux dire simplement:
list_map(myList, f()); //apply function f to the current linked list
Ou dois-je vraiment besoin de définir quelque part list_map? Je ne suis pas l'étudiant typique à la recherche de quelqu'un pour faire mon travail. J'essaie vraiment de comprendre cela du mieux que je peux.
Merci à vous tous.
[EDIT PORTION]
Je voulais ajouter que l'une des affiches Kaleb P. dit
« Ainsi, votre travail consiste à créer une fonction de tri que vous passerez . à list_map Notez que la syntaxe correcte pour passer en sera: »
donc, si mon code simplement th est:
dans le fichier .h I prototyper la fonction:
void myCustomSort(void*);
Et puis dans le.cpp il devient:
void myCustomSort(void*f)
{
tmp=f->head;
while(tmp!=NULL)
{
tmp2=tmp->next; //pointer to next node
while(tmp2!=NULL)
{
if (tmp2->data < tmp->data)
{
int x = tmp2->data;
tmp2->data = tmp->data;
tmp2->data = x;
}
tmp2=tmp2->next;
}
tmp=tmp->next;
}
}
Et pour l'appeler dans le principal, je voudrais juste faire:
list_map(myListPointer, &myCustomSort);
Mais ne pas avoir besoin de définir list_map quelque part? Parce que c'est dans le fichier .h ne dois-je pas le définir?
Je ne pense pas qu'il soit possible de trier une liste si la fonction n'est donnée qu'à un seul élément à la fois sans autre connaissance. –
mais myList est une liste pas un seul élément. – oJM86o
Oui, mais une fonction map() prend généralement une séquence et une autre fonction, puis applique la fonction sur chaque élément de la liste, et vous pouvez voir à partir de la signature list_map() que c'est ce qu'elle fait (elle prend un seul vide * argument). –