Discussion:Liste chaînée

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikipédia, l'encyclopédie libre.
Autres discussions [liste]
  • Admissibilité
  • Neutralité
  • Droit d'auteur
  • Article de qualité
  • Bon article
  • Lumière sur
  • À faire
  • Archives
  • Commons

Ancien contenu[modifier le code]

J'aimerais faire remarquer que la nouvelle orthographe de chaînée est chainée (réforme 1990). Quelqu'un sait-il si l'orthographe adoptée sur Wikipédia est standard ou réformée ?

Il semblerait que cela ne soit pas obligatoire (Catégorie:Graphie de 1990) : « comme Wikipédia ne favorise pas cette norme graphique qui n'est pas encore largement utilisée, les articles concernés sont donc tous des redirections sauf exceptions ». Et la redirection existe. Sanao 12 novembre 2006 à 16:59 (CET)[répondre]

Exemple concret d'un liste[modifier le code]

Est-il intéressant de proposer une version complète d'une liste ? Par exemple, on peut montrer le code source des fonctions nécessaires à une insertion ou à une suppression. Je suis capable de faire cela en C/C++ mais je ne sais pas si cela est judicieux (cela pourrait surcharger l'article).MGK (discuter) 18 juillet 2014 à 18:22 (CEST)[répondre]

Pour l'instant, je vais commencer par proposer une classe en C++ basique avec une méthode pour ajouter un élément au début et en supprimer un à la fin. Il réutilisera la structure proposée en C.MGK (discuter) 18 juillet 2014 à 18:31 (CEST)[répondre]

Pertinence du langage C++ dans l'exemple complet[modifier le code]

Le langage C++ disposant dans la STL de la classe list, qui permet de faire des listes doublement chaînées (ce que n'indique pas l'article qui pourrait renvoyer à Sequence container (C++)#List (en) pour ne pas induire en erreur le lecteur sur ce point), il me semble plus pertinent de proposer un exemple en C. --Treebeard (discuter) 21 octobre 2014 à 11:40 (CEST)[répondre]

Amélioration du code C++[modifier le code]

J'ai procédé à une correction et amélioration du code C++.

Entre autres choses dans la fonction membre d'ajout, le new est réalisé en tout premier pour offrir une garantie forte de résistance aux exceptions: si le new échoue, l'instance n'est pas altérée.

Je suis resté sage dans mes modifications.

  • Idéalement, il faudrait séparer itération et point d'entrée vers les chaînons. Cela permettrait d'éviter les opérations début et fin qui moulinent systématiquement alors que l'on pourrait stocker ces 2 pointeurs dans la liste. AMA, on n'est plus à sizeof T* sur les machines où nous faisons de l'allocation dynamique. Cependant cela nécessiterait l'introduction d'une notion d'itérateur indépendante.
  • Je n'ai pas touché à la programmation défensive en place, alors que l'on pourrait avoir des préconditions fortes à base d'assert() -- en attendant le support de la programmation par contrat dans une version future du langage. Note que cela aurait évité le bug sur supprimer_dernier dans le cas vide, bug introduit par le faux sentiment de sécurité vu fin ne plante pas... J'y mis un assert du coup, mais il faudrait harmoniser...
  • J'aurai trouvé un while (index->suivant) plus expressif qu'un while (index->suivant != nullptr) ou encore if (not index->suivant) bien plus parlant que if (index->suivant == nullptr).

Bref, +1 aux autres remarques pour utiliser une formulation plus algorithmique (comme sur la page anglaise) plutôt que d'ouvrir la porte à des subtilités sur chaque choix de langage.

--Luc Hermitte (discuter) 14 juillet 2021 à 11:34 (CEST)[répondre]