Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2145 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  queue de messages : liste chainé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

queue de messages : liste chainé

n°273327
blackgodde​ss
vive le troll !
Posté le 19-12-2002 à 20:12:47  profilanswer
 

bonjour, j'aimerais faire une queue de message (MessageQueue) avec une liste chaîné, mais je maitrise mal les listes chaînés encore : je dois mettre les messages d'un coté, et les récupérer de l'autre, mais je maîtrise que qd on prend le dernier qu'on a mis... (comme la pile).
 
si jms qq1 a un petit exemple ? merci :)


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 19-12-2002 à 20:12:47  profilanswer
 

n°273388
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 19-12-2002 à 21:13:22  profilanswer
 

ben il suffit de parcourir la liste  :??:


---------------
du bon usage de rand [C] / [C++]
n°273394
blackgodde​ss
vive le troll !
Posté le 19-12-2002 à 21:44:43  profilanswer
 

vaut-t-il mieux que je fasse :
 
(sans prendre en compte si il n'y a pas de mess ou si c le 1er)
 

Code :
  1. struct NODE
  2. {
  3.    NODE* pNext;
  4.    // mes données
  5. };
  6. void PostMess(NODE* NodeList, /* mes données */)
  7. {
  8.    NODE* pNewNode = new NODE;
  9.    // pNewNode = mes données
  10.    pNewNode->pNext = NodeList;
  11.    NodeList = pNewNode
  12. }
  13. NODE* GetMessage(NODE* NodeList)
  14. {
  15.    for(NODE* ForLastNode = NodeList; ForLastNode->pNext->pNext != NULL; ForLastNode = ForLastNode->pNext);
  16.    // en admettant que g mis pour le 1er node entré : pNext = NULL
  17.  
  18.    NODE* LastNode = ForLastNode->pNext;
  19.    ForLastNode->pNext = NULL;
  20.    return LastNode;
  21. }


 
ou avec une liste doublement chaînée ? mais je c pas trop comment fonctionne une liste doublement chaînée ...


---------------
-( BlackGoddess )-
n°273399
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 19-12-2002 à 21:56:34  profilanswer
 

ben t'as un champ previous en plus, c'est juste un chainege de plus à maintenir. apparemment tu fais du C++, alors pourquoi ne pas faire une jolie classe, chacher tout ces pointeurs, et rajouter des fonctionnalites (insertion(rang), suppression(rang), copie, etc)
 

Code :
  1. void PostMess(NODE* NodeList, /* mes données */)
  2. {
  3.   NODE* pNewNode = new NODE;
  4.   // pNewNode = mes données
  5.   pNewNode->pNext = NodeList;
  6.   NodeList = pNewNode
  7. }


 
l'a tu consideres que l'insertion se fait en tete. le problème c'est que ça ne marche pas: ton paramètre NodeList n'est pas modifié car il manque une indirection (rajoute un niveau de pointeur sur NodeList de facon a pouvoir modifié l'argument effectif)
 

Code :
  1. NODE* GetMessage(NODE* NodeList)
  2. {
  3.   for(NODE* ForLastNode = NodeList; ForLastNode->pNext->pNext != NULL; ForLastNode = ForLastNode->pNext);
  4.   // en admettant que g mis pour le 1er node entré : pNext = NULL
  5.  
  6.   NODE* LastNode = ForLastNode->pNext;
  7.   ForLastNode->pNext = NULL;
  8.   return LastNode;
  9. }

 
 
ton for ne peut pas marcher tu test si ForLastNode->pNext->pNext!= NULL, encore faut il que ForLastNode soit different de NULL et valide! et pi de toute facon je comprens rien à ta fonction. c'est pas claire, ni pour moi, ni dans ma tete. avant de commencer à vouloir sur-spécialiser ta liste pour un problème spécifique, commence par te pencher sur les listes générique ou utilises les std::list (meme si j'ai bien compirs que c'etait un exercice didactique)


Message édité par Taz@PPC le 19-12-2002 à 21:57:13

---------------
du bon usage de rand [C] / [C++]
n°273435
blackgodde​ss
vive le troll !
Posté le 19-12-2002 à 23:12:31  profilanswer
 

je fais pas une jolie classe parce que cette liste chaînée va deja faire partie d'une classe qui devra construire en interne une queue de message et avoir un membre public pour pouvoir les retirer.
 
Je voulais savoir juste en fait si ds ce cas de figure il était mieux de faire une liste chaînée ou une doublement chaînée ?
 
(ensuite pour la mise au point, je réfléchirais bien et je ferais des tests, mais mci pour le NODELIST ** car je pense que j'aurais cherché lgtps avant de trouver)


---------------
-( BlackGoddess )-
n°273514
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-12-2002 à 09:40:43  profilanswer
 

ben ca depend: si tu veux offrir des fonctionnalites comme iterer une liste avec un curseur/iterateur: alors c'est mieux double. si ts opérations, c'est juste: ajouter,supprimer, rechercher, simple ça suffit. mais au fait, si tu fait une file/queue, pourkoi tu parle de liste?


Message édité par Taz@PPC le 20-12-2002 à 09:41:29

---------------
du bon usage de rand [C] / [C++]

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  queue de messages : liste chainé

 

Sujets relatifs
[C] Liste chainée que j'arrive pas à parcourir [resolu]Comment récupérer la liste des utilisateurs d'un domaine Windows ?
supprimer des caractères dans une chaîne ?Help pour un petit progrramme de messages queues
Fonctions pour passer un int vers un char et une chaine vers un int ?[C / Algo] - Tri d'une liste chainée par nom [ résolu... oufff ! ]
Ou puis-je trouver une liste de ts les pays pr mettre dans un combo?[HTML]Comment recuperer ts les elt selectionnées d'une boîte liste?
Liste de sites sur DelphiComment lit-on un caractère dans une chaine ?
Plus de sujets relatifs à : queue de messages : liste chainé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR