if(pEncours!=null) {
System.out.print(pEncours.valeur+" ");
parcours_recursif(pEncours.pSuiv);
}
}
// Programme principal
public static void main(String[] args) {
element pTete,pPrec;
int v;
pTete=cree_liste2();
parcours_liste(pTete);
System.out.println("Saisir la valeur recherchee :");
v=saisir();
if(existe_liste(v,pTete)) System.out.println("Trouvé !");
else System.out.println("Absent !");
pTete=ajout_element(2,15,pTete);
parcours_liste(pTete);
System.out.println("Saisir la valeur à supprimer" :);
v=saisir();
pTete=suppr_element(v,pTete);
parcours_recursif(pTete);
System.out.println();
suppr_liste(pTete);
}
}
3. Autres exemples de listes
a. Listes circulaires
Une liste circulaire permet d’accéder à n’importe quel élément de la liste depuis n’importe quel autre élément sans
passer par le pointeur de tête.
Pour mettre en place ce type de liste, il suffit de faire pointer l’élément suivant du dernier élément sur le pointeur de
tête.
Dans une telle liste, les fonctions d’ajout et de suppression d’éléments sont simplifiées et correspondent aux
fonctions d’ajout et de suppression au milieu. Il y a un petit problème pour la fonction de recherche qui du coup ne
s’arrête jamais ! Il faut donc placer un drapeau pour arrêter la recherche quand on retombe sur l’élément de départ.
Il suffit de stocker l’adresse de départ. Si vous retombez dessus, c’est que vous avez parcouru toute la liste.
b. Listes d’éléments triés
Dans ce type de liste, les éléments sont placés selon un ordre défini par vousmême au sein des valeurs contenues
dans les éléments. Ainsi vous êtes assuré de respecter cet ordre lors du parcours de la liste.
Vous devez adapter la fonction de recherche pour faire respecter cet ordre.
c. Listes doublement chaînées
Dans une liste chaînée simple, le parcours ne s’effectue que dans un seul sens, et depuis un élément vous ne pouvez
pas retourner au précédent. Une première méthode consisterait à conserver l’adresse de chaque élément précédent,
ce qui serait possible avec l’utilisation de fonctions récursives, mais ce serait très lourd.
L’autre possibilité consiste à utiliser des listes doublement chaînées : chaque élément ne contient non plus un seul
pointeur, mais deux : un pour l’élément suivant, un autre pour l’élément précédent. Ainsi, vous pouvez vous déplacer
- 12 -
© ENI Editions - All rigths reserved - Jonifar lina
185
System.out.print(pEncours.valeur+" ");
parcours_recursif(pEncours.pSuiv);
}
}
// Programme principal
public static void main(String[] args) {
element pTete,pPrec;
int v;
pTete=cree_liste2();
parcours_liste(pTete);
System.out.println("Saisir la valeur recherchee :");
v=saisir();
if(existe_liste(v,pTete)) System.out.println("Trouvé !");
else System.out.println("Absent !");
pTete=ajout_element(2,15,pTete);
parcours_liste(pTete);
System.out.println("Saisir la valeur à supprimer" :);
v=saisir();
pTete=suppr_element(v,pTete);
parcours_recursif(pTete);
System.out.println();
suppr_liste(pTete);
}
}
3. Autres exemples de listes
a. Listes circulaires
Une liste circulaire permet d’accéder à n’importe quel élément de la liste depuis n’importe quel autre élément sans
passer par le pointeur de tête.
Pour mettre en place ce type de liste, il suffit de faire pointer l’élément suivant du dernier élément sur le pointeur de
tête.
Dans une telle liste, les fonctions d’ajout et de suppression d’éléments sont simplifiées et correspondent aux
fonctions d’ajout et de suppression au milieu. Il y a un petit problème pour la fonction de recherche qui du coup ne
s’arrête jamais ! Il faut donc placer un drapeau pour arrêter la recherche quand on retombe sur l’élément de départ.
Il suffit de stocker l’adresse de départ. Si vous retombez dessus, c’est que vous avez parcouru toute la liste.
b. Listes d’éléments triés
Dans ce type de liste, les éléments sont placés selon un ordre défini par vousmême au sein des valeurs contenues
dans les éléments. Ainsi vous êtes assuré de respecter cet ordre lors du parcours de la liste.
Vous devez adapter la fonction de recherche pour faire respecter cet ordre.
c. Listes doublement chaînées
Dans une liste chaînée simple, le parcours ne s’effectue que dans un seul sens, et depuis un élément vous ne pouvez
pas retourner au précédent. Une première méthode consisterait à conserver l’adresse de chaque élément précédent,
ce qui serait possible avec l’utilisation de fonctions récursives, mais ce serait très lourd.
L’autre possibilité consiste à utiliser des listes doublement chaînées : chaque élément ne contient non plus un seul
pointeur, mais deux : un pour l’élément suivant, un autre pour l’élément précédent. Ainsi, vous pouvez vous déplacer
- 12 -
© ENI Editions - All rigths reserved - Jonifar lina
185
