Bonjour,

voilà j'ai implémenter une FIFO suivant le modèle suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
typedef struct noeud_file s_noeud_file;
 
struct noeud_file
{
   s_noeud_arbre *p_noeud_arbre;
   s_noeud_file *p_suivant;
};

dans cette file je sauvegarde les adresses des noeuds d'un arbre binaire de recherche (pour pouvoir faire ensuite un parcours en largeur)

Ma file ce présente comme suit:

j'ajoute à partir de la gauche, et je retire à partir de la droite. Le point d'entre de ma file est un pointeur sur le dernier element qui lui même pointe sur le premier élément.

Je voudrais faire une fonction dequeue minimaliste, et voilà comment j'ai implémenté l'histoire, lorsque je déroule le code à la main sa fonctionne, quelqu'un pourrait t'il juste confirmer que c'est bon(j'ai tjs un peu de mal quand il s'agit de pointeur sur pointeur).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* --------------------------------------------------------------------------
   retirer_dans_file ()
   --------------------------------------------------------------------------
   Role : retourne l'information utile du premier noeud
   --------------------------------------------------------------------------
   Condition : la file n'est pas vide
   -------------------------------------------------------------------------- */
s_noeud_arbre *retirer_dans_file (s_noeud_file **p_pdernier)
{
   /* on utilise un pointeur temporaire pour memoriser une adresse */
   s_noeud_file **p_ptmp = &(*p_pdernier)->p_suivant;
 
   /* on sauvegarde l'information utile a revoyer */
   s_noeud_arbre *p_noeud_arbre = (*p_ptmp)->p_noeud_arbre;
 
   /* on doit libere le noeud lu */
   (*p_pdernier)->p_suivant = (*p_ptmp)->p_suivant;
   free (*p_ptmp), *p_ptmp = NULL;
 
   return p_noeud_arbre;
}
Merci