web-dev-qa-db-fra.com

Pourquoi avons-nous exactement besoin d'une structure de données "Liste chaînée circulaire" (une ou deux fois)?

Pourquoi avons-nous exactement besoin d'une structure de données "Liste chaînée circulaire" (une ou deux fois)?

Quel problème résout-il avec les simples listes chaînées (simples ou doubles)? 

35
user366312

Un exemple simple consiste à savoir à qui appartient le tour d’un jeu de plateau à plusieurs joueurs. Mettez tous les joueurs dans une liste chaînée circulaire. Après qu'un joueur ait joué son tour, avance au prochain joueur de la liste. Cela fera que le programme se répète indéfiniment parmi les joueurs.

Pour parcourir une liste liée circulaire, stockez un pointeur sur le premier élément que vous voyez. Lorsque vous revoyez cet élément, vous avez parcouru toute la liste.

void traverse(CircularList *c) {
  CircularList start = c;
  do {
    operateOnNode(c);
    c = c->next;
  } while(c != start);
}
40
Andrew Cone

Deux raisons pour les utiliser:

1) Certains domaines problématiques sont par nature circulaires. 

Par exemple, les carrés d'un panneau Monopoly peuvent être représentés dans une liste liée de manière circulaire, afin de correspondre à leur structure inhérente.

2) Certaines solutions peuvent être associées à une liste à liens circulaires pour plus d’efficacité.

Par exemple, un tampon de gigue est un type de tampon qui prend des paquets numérotés d'un réseau et les met dans l'ordre, de sorte qu'un lecteur vidéo ou audio (par exemple) puisse les lire dans l'ordre. Les paquets trop lents (laggy) sont rejetés.

Cela peut être représenté dans un tampon circulaire, sans avoir besoin d'allouer et de désallouer de la mémoire en permanence, car les slots peuvent être réutilisés une fois qu'ils ont été lus.

Il pourrait être mis en œuvre avec une liste chaînée, mais il y aurait des ajouts et des suppressions constants à la liste, plutôt que de remplacer les constantes (qui sont moins chères).

20
Oddthinking

Applications

1) Nous pouvons utiliser une liste chaînée circulaire pour toute application dans laquelle les entrées apparaissent en rotation.
2) La liste chaînée circulaire est l’idée de base de l’algorithme de programmation à tour de rôle.

10

Quelque chose que j'ai trouvé de google.

Une liste circulaire liée individuellement est une liste liée où le dernier nœud de la liste pointe vers le premier nœud de la liste. Une liste circulaire ne contient pas de pointeurs NULL. 

Un bon exemple d'application où une liste chaînée circulaire devrait être utilisée est un problème de temps partagé résolu par le système d'exploitation. 

Dans un environnement à temps partagé, le système d'exploitation doit conserver une liste des utilisateurs actuels et permettre alternativement à chaque utilisateur d'utiliser une petite tranche de temps processeur, un utilisateur à la fois. Le système d'exploitation choisira un utilisateur, lui permettra d'utiliser un peu de temps CPU, puis passera à l'utilisateur suivant, etc. 

Pour cette application, il ne devrait y avoir aucun pointeur NULL sauf s'il n'y a absolument personne qui demande le temps CPU.

8
Praveen S

Une liste chaînée circulaire peut être utilisée efficacement pour créer une file d’attente (FIFO) ou un deque (insertion efficace et suppression recto verso). Voir http://fr.wikipedia.org/wiki/Linked_list#Circularly-linked_vs._linearly-linked

5
amit

Un bon exemple d'application où une liste chaînée circulaire devrait être utilisée est un problème de temps partagé résolu par le système d'exploitation.

1
Rahul Singal

Les listes chaînées circulaires sont largement utilisées dans les applications où les tâches doivent être répétées ou dans les applications à partage de temps. La file d'attente circulaire peut garder une trace des tâches qui ont été effectuées et qui doivent être accomplies. Une fois que la tâche spécifique est terminée, elle passe à la suivante et lorsque tout un ensemble de tâches est achevée, elle revient à la première tâche pour terminer le travail restant. En pratique: lorsque vous ouvrez plusieurs applications sur votre système, la mémoire de ces applications est enregistrée de manière circulaire. Vous pouvez le constater si vous appuyez continuellement sur les touches Win + Tab/Alt + Tab pour changer d’application . dans les jeux de table multijoueurs, chaque joueur est affecté à un nœud dans la liste liée et la rotation est effectuée 

0
wolf_flow

Nous pouvons utiliser une liste à liens circulaires dans la mise en commun des ressources. Si de nombreux utilisateurs souhaitent utiliser une ressource partagée, nous pouvons affecter cette ressource à l'aide d'une liste liée de manière circulaire.

0
Nitish Goyal

Une liste circulaire est plus simple qu'une liste normale à double lien. Append est juste préfixe et avance une fois, Pop back est juste décale une fois et pop avant En reliant les deux extrémités ensemble, vous obtenez une liste à double extrémité pour le coût de la mise en œuvre des opérations d'une liste à une extrémité.

0
u0b34a0f6ae