Composants | |
struct | FredCell |
descripteur de cellule de liste Plus de détails... | |
struct | FredList |
descripteur de liste Plus de détails... | |
Définitions des macros | |
#define | NIL ((FredCell*)0) |
macro pour définir le pointeur vide | |
#define | FredCELL FredCell _cell |
macro pour définir une structure comme une cellule de liste | |
#define | FredListEmpty(Q) (((Q)->last) == (FredCell*)0) |
Test de file vide. | |
Définitions des types | |
typedef FredCell | FredCell |
descripteur de cellule de liste | |
typedef FredList | FredList |
descripteur de liste | |
Fonctions | |
void | FredListPutLast (FredList *q, FredCell *b) |
Insertion en queue d'une cellule. | |
FredCell * | FredListGetFirst (FredList *q) |
Retrait de la cellule de tête. | |
void | FredListInit (FredList *q) |
Initialisation de la liste. |
|
Pour définir une structure qyelconque comme pouvant être insérer dans une liste, il suffit d'insérer FredCELL en premiere définition des composants de la structure struct MyCell{ FredCELL; int x; int y; ... }; |
|
|
|
|
|
Dans une liste circulaire à 1 élément, celui ci est son propre successeur et prédécesseur. Il est donc doublement rechainé sur lui-même. |
|
Une liste circulaire pointe sur le dernier élément. Pour une liste vide, ce derrnier élément est nul. |
|
00048 { 00049 FredCell* b; 00050 if(FredListEmpty(q)){ 00051 /* file vide */ 00052 return NIL; 00053 }else if ( q->last->next==q->last){ 00054 /* file à 1 item */ 00055 b=q->last; 00056 q->last=NIL; /* la file devient vide */ 00057 }else { 00058 b=q->last->next; 00059 b->pred->next=b->next; 00060 b->next->pred=b->pred; 00061 } 00062 b->next=b->pred=NIL; /* la cellule n'est plus chainée */ 00063 return b; 00064 } |
|
Implantation
|
|
Implantation L'insertion en queue place la nouvelle cellule entre le dernier et le premier. Elle devient le nouveau dernier item. Deux cas particuliers sont la file vide et la file à une cellule (qui est chainée sur elle même). Ce dernier cas peut se programmer comme le cas général.
|