Comment mettre en œuvre file d'attente de priorité dans la programmation en C?
J'ai besoin d'implémenter une file d'attente de priorité dans la programmation en C à l'aide seule liste liée.
Je n'ai pas une idée claire au sujet de la priorité de la file d'attente. J'ai cherché sur google mais n'ai pas bien compris ce que j'ai trouvé. Ma compréhension est que l'une des priorités de la file d'attente est une file d'attente dont les éléments sont classés par ordre de priorité. Les Insertions dans la liste sont positionnés dans la liste sur la base de l'élément priorités.
Permet de dire,nous avons scénario suivant. (Note : je suppose, valeur la plus élevée va de pair avec de plus forte priorité):
Element-->2 (priority=2) (Now in position 0)
Si un autre élément doit être inséré, dire Element-->3 (priority=3)
qui a une priorité plus élevée.
Je peux déplacer l'élément précédent, Element-->2 (priority=2)
, et insérer ce nouveau Element-->3 (priority=3)
à la position 0 avec Element-->2 (priority=2)
déplacé à la position 1 dans la liste.
Maintenant, la liste devient,
Element-->3 (priority=3) followed by Element-->2 (priority=2)
De même, sur la base de l'insertion, dois-je décaler tous les éléments dans la liste?
Est-ce correct?
il suffit de parler,lorsqu'il a à opérer sur la liste, il prend l'élément avec la plus haute priorité à opérer sur...comment vous faites cela dépend si vous placez la priorité la plus élevée de l'élément à la liste avant ou vous placer dans le tas avant(si vous utilisez un segment de mémoire)...
OriginalL'auteur Dinesh | 2011-11-24
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas à "maj" de la liste, au lieu de cela lors de l'insertion de vous faire quelque chose comme ceci (pseudo-code):
Si votre liste est un pointeur vers la fin, vous pouvez ajouter un contrôle particulier pour une priorité plus basse qu'à la fin aussi.
OriginalL'auteur Some programmer dude
Je pense que vous êtes d'avoir des ennuis à cause d'une file d'attente de priorité devrait être mise en œuvre avec un tas arbre, pas une seule liste liée.
Le tas, tout devient facile: toutes les opérations sont très bon marché: la mise à jour, la suppression et l'insertion dans le tas sont tous O(log n).
OriginalL'auteur Anthony Blake
Vous êtes OK avec les files d'attente de priorité. Mais...
Une liste chaînée n'est pas un simple tableau.
Chaque élément dans une liste chaînée est une référence à l'élément suivant. Vous pouvez insérer un élément l'un après l'autre en changeant juste les références de ces deux éléments.
L'insertion de C entre A et B est réalisée par:
NULL
en C parref to B
ref to B
dans Unref to C
OriginalL'auteur mouviciel
Une file d'attente de priorité est un Type Abstrait de Données qui maintient essentiellement des éléments dans l'ordre de tri (croissant ou décroissant) sur certaines choisi clé. Comme mentionné par Anthony Blake, le segment de la mise en œuvre est la plus simple, la structure sous-jacente que vous utilisez est tout simplement un tableau et d'effectuer quelques manipulations centrée sur l'index du tableau.
Si, pour une raison quelconque vous souhaitez mettre en œuvre à l'aide d'une seule liste liée, ci-dessous un code de démonstration pour effectuer triés insertion dans un endroit de la mode:
}
OriginalL'auteur Moses Xu
Ok, je ne sais pas pourquoi vous en avez besoin en C. En C++, STL, il est disponible.
Mais que vous le souhaitez voici le lien vers le code source de votre ask.
OU
Espère que cela aide.
OriginalL'auteur Robel Sharma