web-dev-qa-db-fra.com

Qu'est-ce qu'un exemple concret et réel de la liste chaînée?

Je comprends la définition d'une liste chaînée, mais comment peut-elle être représentée et liée à un concept ou à un élément commun? 

Par exemple, la composition (EDIT: à l'origine dit 'héritage') dans OOP peut être liée aux automobiles. Toutes les voitures (la plupart) dans la vie réelle sont essentiellement la même chose; une automobile a un moteur, vous pouvez le démarrer (), vous pouvez faire démarrer la voiture (), arrêter (), etc. Une automobile aurait généralement une capacité maximale en passagers, mais ce serait différent entre un bus et une voiture de sport, qui sont toutes deux des voitures. 

Existe-t-il dans la vie réelle, un exemple intuitif de la liste simple, comme on en a avec l'héritage? L'exemple typique de la liste liée d'un manuel montre un nœud avec un entier et un pointeur sur le suivant, et cela ne semble pas très utile. 

Votre contribution est appréciée. 

42
JStims

Une liste chaînée est comme une ligne conga line . Tout le monde tient les hanches de la personne qui se trouve devant elles et leurs hanches sont tenues à son tour par la personne située à l'arrière, à l'exception de celles situées à l'avant et à l'arrière. La seule façon d'ajouter des personnes à la ligne est de trouver le bon endroit et de découpler cette connexion, puis d'insérer la ou les nouvelles personnes.

55
Brian Guthrie

Je suppose que vous voulez une explication plus métaphorique que la définition du livre, au lieu d'exemples sur la manière d'utiliser une liste chaînée.

Une liste chaînée est un peu comme une chasse au trésor. Vous avez un indice, et cet indice a un pointeur à placer pour trouver le prochain indice. Alors vous allez au prochain endroit et obtenez un autre élément de données et un autre pointeur. Pour obtenir quelque chose au milieu ou à la fin, la seule façon d'y arriver est de suivre cette liste depuis le début (ou de tricher;))

47
Mike Cooper

Qu'est-ce qu'un exemple concret et concret de la liste chaînée?

Le plus simple et le plus simple est un train.

Les wagons de train sont liés dans un ordre spécifique afin de pouvoir être chargés, déchargés, transférés, déposés et récupérés de la manière la plus efficace possible.

Par exemple, l’usine Jiffy Mix a besoin de sucre, de farine, de semoule de maïs, etc. Une usine de transformation du papier pourrait nécessiter du chlore, de l’acide sulfurique et de l’hydrogène.

Nous pouvons maintenant arrêter le train, décharger chaque wagon de son contenu, puis laisser le train continuer, mais tout le reste du train doit rester assis pendant que la farine est aspirée du caisson, puis le sucre, etc.

Au lieu de cela, les wagons sont chargés dans le train de manière à pouvoir en détacher une partie entière et le reste du train se déplace. 

L’extrémité du train est plus facile à détacher qu’une partie du milieu et beaucoup plus facile que celle de détacher quelques voitures à un endroit et quelques voitures à un autre endroit.

Toutefois, si nécessaire, vous pouvez insérer et supprimer des éléments à n’importe quel point du train.

Un peu comme une liste chaînée.

-Adam

33
Adam Davis

Ligne d'attente chez un caissier/caissier, etc ...

Une série d'ordres qui doivent être exécutés dans l'ordre.

Toute structure FIFO peut être implémentée sous forme de liste chaînée.

12
Ben S

La première chose à comprendre est qu'une liste chaînée est conceptuellement identique à un tableau.

La seule différence réside dans le efficacité de diverses opérations. Le plus important:

  • Insertion au milieu: O(1) pour liste, O(n) pour tableau.
  • Accès direct à un élément du milieu: O(n) pour liste, O(1) pour tableau.

Ainsi, toute analogie pouvant être utilisée pour un tableau (tous les moteurs d’un avion, tous les éléments d’une liste de courses, etc.) s’applique également à une liste chaînée, mais la considération de l’efficacité pourrait rendre approprié une autre analogie:

Un tableau serait des boîtes dans une bibliothèque . Lorsque vous retirez la boîte de la nième rangée, toutes les boîtes de n + 1 doivent être déplacées d’une étagère vers le bas (vous n’avez donc pas d’étagère vide gênante).

Inversement, une liste chaînée serait un collier . Lorsque vous constatez que vous n'aimez plus ce joyau bleu, retirez-le de la séquence et reliez les deux bouts ensemble. Pas besoin de passer à travers chaque perle et de la déplacer afin de pouvoir fixer votre collier.

12
Iraimbilanja

La façon dont Blame évolue autour d’un groupe d’ingénieurs en logiciels travaillant sur différents modules d’un projet.

Tout d’abord, le responsable de l’interface graphique se fait reprocher le produit qui ne fonctionne pas. Il vérifie son code et constate que ce n'est pas sa faute: l'API se trompe. Le gars de l'API vérifie son code: pas sa faute, c'est un problème avec le module de journalisation. Le module Logger accuse maintenant le responsable de la base de données, celui des installateurs, celui des installateurs ...

10
Warpin

Une chaîne:

 alt text

Surtout la chaîne à rouleaux:

 alt text

Chaque élément de la chaîne est connecté à son successeur et à son prédécesseur.

8
Daniel Rikowski

Je me souviens, il y a de nombreuses années, dans l'une de mes premières classes d'université, me demandant où je pourrais utiliser une liste chaînée. Aujourd'hui, je ne pense pas qu'il y ait un seul projet sur lequel je ne travaille pas et dans de nombreux endroits. C'est une structure de données incroyablement fondamentale, et croyez-moi, elle est très utilisée dans le monde réel.

Par exemple:

  • Liste des images devant être gravées sur un CD dans une application d'imagerie médicale
  • Une liste des utilisateurs d'un site Web qui doivent recevoir une notification par courrier électronique
  • Une liste d'objets dans un jeu 3D qui doivent être restitués à l'écran

Cela peut sembler un peu inutile pour vous maintenant, mais dans quelques années, posez-vous la même question, vous serez surpris d'apprendre que vous vous êtes jamais demandé où il serait utilisé.

Edit: J'ai remarqué dans un de vos commentaires que vous avez demandé pourquoi le pointeur est important. Quelqu'un a répondu à juste titre que le pointeur importait peu à l'utilisateur d'une liste chaînée. Un utilisateur veut juste une liste qui contient une liste de choses. Comment cette liste "contient" cette liste de choses n'a pas vraiment d'importance pour l'utilisateur. Le pointeur fait partie de ce "comment". Imaginez une ligne tracée sur le sol qui mène à un caissier. Les gens doivent rester sur cette ligne pour pouvoir se rendre au caissier. Cette ligne est une analogie (et je l’avoue, c’est un peu exagéré) pour le pointeur utilisé par une liste chaînée. La première personne, à la caisse, sur la ligne, est en tête de liste. La personne directement derrière eux sur la ligne est la suivante dans la liste. Enfin, la dernière personne de la ligne est la queue de la liste.

8
Rob

Vos molécules d'ADN sont des listes à double liaison.

8
Guge

Exemple concret pour:

** 1) Liste des liens simples **

  1. Cerveau humain d'un enfant (pour se rappeler quelque chose, par exemple un poème, il doit le lier, si vous lui demandez la dernière ligne, il devra lire à partir de la première ligne)
  2. remise du message sur le réseau (le message est divisé en paquets et chaque paquet a une clé de la suivante afin que, du côté du destinataire, il soit facile de les matraquer)

2) Liste à double liens

  1. Molécules d'ADN
  2. Cache du navigateur qui permet d’utiliser le bouton RETOUR.
  3. Les autocars sont reliés aux suivants et aux précédents.
  4. Chaîne à rouleaux de vélo (liste chaînée doublement circulaire)

3) Liste chaînée circulaire

  1. Escalier mécanique
  2. Problème de partage du temps utilisé par le planificateur lors de la planification des processus dans le système d'exploitation.
  3. Jeu de société à plusieurs joueurs 
7
Tutu Kumari

Si vous y réfléchissez, un "lien" est simplement un moyen d’identifier une relation "Suivant", "Précédent", "Enfant" ou "Parent" entre des instances de données. Ainsi, parmi les applications du monde réel, vous trouverez une grande variété d'applications. Pensez à une simple liste (par exemple, une liste d'épicerie) pour des listes chaînées de base. Mais considérons aussi les utilisations possibles des graphes (tracé des distances entre les villes sur une carte, interactions entre espèces en biologie) ou des arbres (hiérarchies dans une organisation ou données dans l'index d'une base de données pour deux exemples très divers).

6
Mark Brittingham

Dans le cas général, les listes chaînées sont l’une des choses les plus diablement utiles que vous rencontrerez.

Exemples concrets: 

  • Un groupe de personnes qui attendent en file d'attente quelque chose - un type spécial .__ de LL a appelé une "file d'attente".

  • La pile de vaisselle dans votre armoire en porcelaine - un type spécial de LL appelé Une "pile".

  • Les lignes "prendre un numéro" (où les numéros Doivent recommencer à partir de "1" à un moment donné) - un type spécial de LL appelé "file d'attente circulaire".

Généralement, la métaphore que j’aime utiliser pour presque toutes les structures de données liées est un jeu de cartes. À peu près tout ce que vous pouvez faire avec les listes chaînées, vous pouvez utiliser un jeu de cartes pour visualiser. Ceci est particulièrement utile pour vous montrer ce qui se passe dans certains des algorithmes de tri les plus ésotériques. 

Mon favori personnel: Bogosort = jouez le ramassage de 52 cartes jusqu'à ce que votre paquet soit trié. :-)

6
T.E.D.

Cerveau humain peut être un bon exemple de la liste chaînée seule. Au début de l'apprentissage, quelque chose par cœur, le processus naturel consiste à relier un élément à un autre. C'est un acte subconscient. Prenons un exemple de agression sur 8 lignes de Wordsworth's Solitary Reaper:

Behold her, single in the field,
Yon solitary Highland Lass!
Reaping and singing by herself;
Stop here, or gently pass!
Alone she cuts and binds the grain,
And sings a melancholy strain;
O listen! for the Vale profound
Is overflowing with the sound.

Notre esprit ne fonctionne pas bien comme un tableau facilitant l'accès aléatoire. Si vous demandez au gars quelle est la dernière ligne, il aura plus de difficulté à le dire. Il devra passer de la première ligne pour y arriver. C'est encore plus difficile si vous lui demandez quelle est la cinquième ligne.

En même temps, si vous lui donnez un pointeur, il ira de l’avant. Ok commence par Reaping and singing by herself; ?. Cela devient plus facile maintenant. C'est encore plus facile si vous pouvez lui donner deux lignes, Alone she cuts and binds the grain, And sings a melancholy strain;, car il obtient un meilleur flux. De même, si vous ne lui donnez rien du tout, il devra recommencer depuis le début pour obtenir les lignes. Ceci est une liste chaînée classique. 

Il devrait y avoir quelques anomalies dans l'analogie qui pourraient ne pas correspondre, mais ceci explique un peu le fonctionnement de la liste chaînée. Une fois que vous maîtrisez un peu le poème ou que vous connaissez le poème à l'intérieur, la liste liée bascule (cerveau) dans une table ou un tableau de hachage qui facilite la recherche O(1) où vous pourrez tracer les lignes à partir de n'importe où.

3
nawfal

Une liste chaînée peut être utilisée pour implémenter un queue . L'exemple de la vie réelle canonique serait une ligne pour un caissier. 

Une liste chaînée peut également être utilisée pour implémenter un stack . Le meilleur exemple conique serait un de ces distributeurs de plaques dans un restaurant buffet où tirer la plaque supérieure du dessus de la pile.

2
JMM

Ma première réaction à cette question fut "Regarde autour de toi! Ce truc est partout!" Mais après avoir réfléchi un peu, je ne pouvais penser à aucun exemple qui ne soit pas artificiel.

Le concept d'une liste chaînée est un concept composé, un deux-fer. Vous avez la notion d'une liste, ce qui n'est pas un problème. Une liste d'épicerie, par exemple. Ensuite, vous arrivez à la partie lien. Un article d'épicerie ne connaît pas le prochain article d'épicerie, alors le modèle se décompose.

Je pense que la difficulté que vous rencontrez pour trouver un monde réel est que la partie lien est un artefact de programmation, un détail de mise en œuvre. Il existe de nombreuses manières d'implémenter des listes par programme, et une bonne solution consiste à faire en sorte que chaque élément de la liste connaisse ses voisins. Une autre façon consiste à avoir un objet List qui garde une trace des éléments et de leur ordre. Voici comment la plupart des listes fonctionnent dans la vie réelle. Dans l'exemple ci-dessus, l'objet Liste de la liste d'épicerie serait le papier (ou autre) sur lequel il est écrit.

Peut-être est-il plus utile de penser aux listes en général et de voir les listes chaînées simplement comme une implémentation spécifique d'une liste.

2
Jeff Grimshaw

et bien si un professeur emmenait ses élèves voir un film d'animation mais ne pouvait pas réunir les places assises, elle demanderait aux élèves de se rappeler l'adresse (numéro de la place) du prochain élève, etc. faire face au problème en revenant !!!

1
nidhi hooda

Regardez une liste liée:

[A] => [B] => [C] => [D] =>

C'est un ... train! Chaque wagon contient quelque chose et est attaché à un autre wagon (ou rien pour le dernier). Vous pouvez uniquement ajouter un wagon à la fin et si vous souhaitez vous en débarrasser, vous devez joindre le précédent au suivant.

1
MarmouCorp

Une chaîne téléphonique est implémentée directement sous forme de liste chaînée. Voici comment ça fonctionne:

  1. Un organisateur de groupe collecte les numéros de téléphone de tous les membres.

  2. L'organisateur attribue à chaque membre le numéro d'un autre membre à appeler. (Parfois, ils assigneront leur propre numéro pour qu'ils sachent que le message a été transmis, mais c'est facultatif.)

  3. Lorsqu'un message doit être envoyé, l'organisateur appelle le responsable de la liste et le transmet.

  4. La tête appelle le numéro qui leur a été attribué et transmet le message.

  5. L'étape 4 est répétée jusqu'à ce que tout le monde ait entendu le message.

Il faut évidemment prendre soin de configurer la liste à l’étape 2 de manière à ce que tout le monde soit lié. En outre, la liste est généralement publique. Ainsi, si une personne reçoit un répondeur ou une tonalité d'occupation, elle peut appeler le numéro suivant et laisser la chaîne en mouvement.

1
Jon Ericson

Le meilleur exemple de liste doublement liée est Train!

enter image description here

Ici, chaque entraîneur est connecté à son entraîneur précédent et suivant (sauf le premier et le dernier)

En termes de programmation, considérez le corps de l'entraîneur comme un nœud de données (valeur) et le connecteur comme un nœud de référence.

1
Meet

Quelques exemples de liste chaînée unique. 

  1. Bouton Annuler de n'importe quelle application telle que Microsoft Word, Paint, etc.: liste d'états liée.
  2. Navigation GPS: Une liste chaînée de données cartographiques. Voyager de l'origine à la destination est un exemple de traversée de tous les nœuds. Le réacheminement par GPS est un exemple d’opérations d’ajout et de suppression de données cartographiques. 

Quelques exemples de liste double liée. 

  1. Bouton Suivant et Précédent du navigateur: liste d’URL liées
  2. Bouton Suivant et Précédent de Microsoft Image Viewer: une liste d'images liée 
  3. Bouton Annuler et Rétablir de Photoshop, une liste d’états liée. 
1
Merin Nakarmi

Donner des directions de voyage: chaque étape dans les directions étant un nœud et l’instruction de déplacement entre chaque nœud est votre lien. 

Exemple:

Noeud 1: Commencez à la maison

Lien: Marchez 3 pâtés de maisons vers le sud jusqu'à la maison de Bob

Noeud 2: La maison de Bob

Lien: Marchez deux rues au nord de la maison d'Alice.

Noeud 3: la maison d'Alice

Si vous voulez aller d'un endroit à un autre, vous devez suivre les liens (instructions) de chaque endroit intermédiaire (noeud), vous ne pouvez pas simplement passer de chez vous à Alice. 

1
Millhouse

Il a demandé un exemple concret; alors je vais tenter le coup:

Disons que vous écrivez un pare-feu; Dans ce pare-feu, vous avez une liste blanche IP et une liste noire IP.

Vous savez que votre adresse IP, celle de vos travaux et certaines adresses IP de test doivent être ajoutées à la liste blanche. Vous ajoutez donc toutes les adresses IP à la liste blanche.

Maintenant, vous avez également une liste d'adresses IP connues qui devraient être bloquées. Donc, vous ajoutez ces adresses IP à la liste noire.

Pourquoi utiliser LinkedList pour cela?

  1. L'opération est rapide pour ajouter/supprimer un élément de la liste.
  2. Vous ne savez pas combien d'adresses IP vont être bloquées/sur liste blanche. Ainsi, révélant l’un des principaux avantages d’une LinkedList (sa redimensionnabilité).
1
user1529891

Une liste chaînée est très similaire à une pile de documents, contenant chacun un élément. (Contrairement aux tableaux, qui sont comme des panneaux perforés.) Il est généralement utilisé pour résoudre un problème avec ces caractéristiques:

  • Il y a un nombre inconnu ou variable d'articles
  • Les articles sont dans un ordre, comme une liste
  • Les articles peuvent être réorganisés, ajoutés à la liste intermédiaire, supprimés à la liste intermédiaire, etc.

Réorganiser un tableau simple est une tâche pénible, ajouter un élément quelque part au milieu tout en s'assurant que le tableau dispose de suffisamment de mémoire, etc. est une douleur. Avec la liste chaînée, ces opérations sont simples. Supposons que vous souhaitiez déplacer l'élément n ° 10 entre les éléments n ° 2 et n ° 3. Avec des papiers, vous pouvez simplement le ramasser et le déplacer. Avec un tableau, vous devez déplacer les éléments 3 à 9 sur un emplacement, puis les insérer. Avec une liste chaînée, procédez comme suit: Dites à 9 celui qui suit est 11, dites à 2 celui qui suit est 10, Dites-lui celui qui suit 3.

J'en utilise plusieurs actuellement, à cause de la facilité avec laquelle il est possible d'ajouter des éléments et de dire par programme "faire cette action pour chaque élément de la liste". L'un d'eux est une liste d'entrées, comme dans une feuille de calcul. L’autre, je passe en parcourant cette première liste et en ajoutant une référence à chaque élément ayant une valeur particulière, afin que je puisse effectuer des opérations par lots sur celui-ci. Être capable de cueillir des éléments au milieu ou de les ajouter au milieu sans avoir à se soucier de la longueur du tableau. Ce sont les principaux avantages de mon expérience.

1
Kim Reece

Dans les systèmes d'exploitation ... on peut utiliser une liste chaînée pour garder trace des processus en cours et des processus en veille ... un processus en cours d'exécution qui veut dormir ... est supprimé de la liste LinkedList qui en assure le suivi processus et une fois le temps de sommeil écoulé, le rajoute au processus actif LinkedList

Peut-être que les nouveaux systèmes d'exploitation utilisent des structures de données géniales ... les listes chaînées peuvent être utilisées ici

0
jsshah

Je ne pense pas qu'il y ait une bonne analogie qui pourrait mettre en évidence les deux caractéristiques importantes par opposition à un tableau: 1. efficace pour insérer après l'élément actuel et 2. inefficace pour trouver un élément spécifique par index.

Il n’ya rien de tel, car normalement, les gens ne traitent pas un très grand nombre d’articles dans lesquels vous devez insérer ou localiser des éléments spécifiques. Par exemple, si vous avez un sac de sable, cela représente des centaines de millions de grains, mais vous n'avez pas besoin de localiser un grain spécifique, et l'ordre des grains n'a pas d'importance.

Lorsque vous traitez avec des collections plus petites, vous pouvez localiser l’élément souhaité de manière visuelle ou, dans le cas de livres dans une bibliothèque, vous aurez une organisation de type dictée.

L'analogie la plus proche est celle d'un homme aveugle qui passe en revue des éléments liés, tels que des maillons de chaîne, des perles sur un collier, des wagons de train, etc. Il serait bon d’ajouter que l’aveugle peut les parcourir très rapidement, par exemple. un million de perles par seconde, mais ne peut sentir qu'un seul lien à la fois et ne peut pas voir la totalité ou une partie de la chaîne.

Notez que cette analogie est similaire à une liste à double liaison, je ne peux pas penser à une analogie similaire à une seule, car avoir une connexion physique implique une capacité de retour en arrière.

0
Rainy

J'aime penser à une liste chaînée circulaire ressemblant à un collier de perles, chaque perle contenant un peu de données. Vous suivez simplement la chaîne jusqu'à la prochaine perle de données et vous finissez par vous retrouver au début.

0
Alex Fort

Dans le BCL .NET, la classe System.Exception a une propriété appelée InnerException, qui pointe vers une autre exception ou sinon est null. Cela forme une liste chaînée.

Dans System.Type, la propriété BaseType pointe vers un autre type de la même manière.

0
Daniel Earwicker

Dans le programme make, vous constaterez souvent que les listes de dépendances pour un fichier particulier devant être généré sont définies comme des listes liées de pointeurs vers d'autres fichiers devant également être générés et comportant à leur tour des dépendances dans des listes liées.

0
Jonathan Leffler

Regardez la liste liée en tant que structure de données. C'est un mécanisme pour représenter l'auto-agrégation dans OOD. Et vous pouvez penser à cela comme un objet du monde réel (pour certaines personnes, c'est la réalité)

0
LicenseQ

Ils le font dans les enfants d'âge préscolaire tout le temps. Quand ils sont dehors sur une route ou quelque chose de similaire, on demande à chaque enfant de tenir la main de deux autres enfants. Chaque enfant sait quelle main il est supposé tenir. C'est comme ça qu'ils traversent la route. Je pense que ceci est un exemple classique d'une liste doublement chaînée.

0
Raghav Navada

considérez 2 boîtes ou plus qui ont 2 compartiments ou plus. (dans cet exemple, chaque boîte comportera 2 compartiments) le premier compartiment contiendra des informations. un nombre ou un mot ... le deuxième compartiment contiendra une flèche pointant vers la case suivante et ainsi de suite.

notez que chaque case peut contenir des compartiments multipales contenant des flèches (pointeurs) et des informations (données).

0
user2693530

Un bon exemple de liste chaînée est votre message texte, dans lequel un certain paquet d’un message peut être divisé en plusieurs paquets. Chaque paquet contient une clé qui se connecte à la clé suivante et à la énième clé pour créer l’ensemble du message texte contenant la clé et les données.

0
bipartite