2009-06-12 10 views
4

Je cherchais dans Generics.Collections et j'ai remarqué qu'il n'y avait pas de liste chaînée. Bien sûr, ils sont simples à faire, mais je pensais que c'était étrange qu'il n'y en avait pas un (ou je l'ai juste manqué). Les listes liées sont-elles dépassées par rapport aux nouvelles structures de données modernes, ou une liste générique liée est-elle nécessaire? Est-ce que quelqu'un en connaît un?Liste générique liée pour Delphi 2009

Répondre

2

Autrefois, presque tous les logiciels sérieux contenaient des listes ou des arbres liés.

Je n'ai pas beaucoup utilisé les listes chaînées, mais les arbres sont une autre histoire. Avec l'introduction des tableaux dynamiques, il n'y a pas tellement besoin de listes chaînées. Mais je peux imaginer que vous voulez l'utiliser si votre structure de données est souvent modifiée (ajouter + supprimer).

Vous pouvez facilement créer vous-même une liste générique, en utilisant une classe de conteneur et des enregistrements pour les éléments.

1

Je ne connais aucune liste générique, liée dans le Delphi RTL existant.

Cependant, ils sont encore très utiles en tant que structure de données. Surtout si vous incluez des variantes sur une liste liée, comme un arbre binaire ou un arbre binaire. Contrairement à une liste régulière, une liste chaînée peut être étendue, modifiée ou modifiée sans déplacer les données en mémoire. Ils sont très faciles à mettre en œuvre et fonctionnent bien dans un code purement fonctionnel qui ne permet pas la mutation de données existantes. C'est donc toujours une structure de données très utile.

0

N'est-ce pas ce que tStringList est pour?

(ducking)

En fait, tout ListeT générique fonctionne bien comme une liste chaînée, et fournit la plupart des fonctionnalités nécessaires. La technique ancestrale transmise par nos ancêtres consistait à stocker un pointeur vers la mémoire dans chaque enregistrement, et naviguer vers cela a été facilement remplacé par des tableaux dynamiques et faire des choses ... plus génériquement.

+3

Lors de l'insertion dans un TList, il faut un mouvement de mémoire de tout ce qui le suit dans le tableau. Une liste liée nécessite simplement de changer un pointeur. –

+0

Certes, ce serait beaucoup plus efficace pour les grandes listes et elles ne sont vraiment pas si difficiles à écrire. Ulrichb a la meilleure réponse, la mise en œuvre, il est juste ce que vous avez demandé. – skamradt