queue de messages : liste chainé

queue de messages : liste chainé - C++ - Programmation

Marsh Posté le 19-12-2002 à 20:12:47    

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 )-
Reply

Marsh Posté le 19-12-2002 à 20:12:47   

Reply

Marsh Posté le 19-12-2002 à 21:13:22    

ben il suffit de parcourir la liste  :??:


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

Marsh Posté le 19-12-2002 à 21:44:43    

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 )-
Reply

Marsh Posté le 19-12-2002 à 21:56:34    

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++]
Reply

Marsh Posté le 19-12-2002 à 23:12:31    

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 )-
Reply

Marsh Posté le 20-12-2002 à 09:40:43    

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++]
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed