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.
|
1.2.17