|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mai 2011 Messages : 12 ![]() |
Bonjour à tous,
j'ai besoin d'aide pour mon code c++, je dois grâce aux enregistrements de maillonT et chainageT, créer une fonction insertion permettant d'insérer un élément de type T EN TETE du chainage . Je n'arrive pas à compiler, il y a surement un problème avec mon pointeur, je pensais pourtant que à la base il fallait dire que ch.tete devient mem(pm).succ et que pm devient du coup la tete du maillon Merci d'avance pour votre aide Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 546 ![]() |
Bonjour,
difficile de comprendre ce que tu espères faire, le code est flou. Quelle est l'erreur de compilation dont tu parles ? S'agit-il d'insérer un élément en tête d'une liste chaînée ? Si oui, il te faut d'abord revoir ton algo calmement avant de l'implémenter. C'est un cas d'école. Tu écris ch.tete = pm; et un peu plus loin if (ch.tete==NULL){ ch.tete = pm ; } Euh...? pourquoi ? A priori ça devrait jamais être vérifié comme test. Pour rappel, le principe d'une liste chaînée en gros c'est structure type struct Element { T value; struct Element* next; };- ne pas hésiter à profiter d'être C++ pour ajouter un constructeur et initialiser enxtà NULL - un élément de tête de liste pour ajouter un élément à la fin - on parcourt la liste jusqu'au bout - on ajoute le nouvel élément pour ajouter un élément au milieu - on parcourt la liste jusqu'à l'élément précédent l'insertion - on met à jour les next du précédent et du nouvel élément pour garder la structure de la liste cohérente pour ajouter un élément au début - voir l'ajout d'élément au milieu en considérant la tete comme élément précédent l'insertion |
|
|
00
|
|
|
#3 | ||||||||||||||
|
Membre Expert
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 180 ![]() |
Tu es en C++, donc, utilise ce qui va bien:
Les en-têtes c++: cstdio et cmalloc, qui d'ailleurs ne servent ni l'un ni l'autre dans ton code. De plus cstdio est avantageusement remplace par iostream Les types réels. struct bidule {…}; déclare un type nommé bidule. typedef T U; associe un alias U à un type T. En C++, il est inutile de faire typedef struct T {…} T; parce que tu donnes l'alias T au type T. Tu obtiens ainsi: Code :
Code :
maillon<int> maillon={1, std::nullptr}; en C++11 et maillon<int> maillon={1, NULL}; en C++ moins récent Pour ta fonction, il y a plusieurs erreur: ta première instruction modifie le chainage reçu en référence, pour définir le nombre d'élément à 0, c'est une erreur, tu perds cette information nb_elt=nb_elt+1; ne peut pas compiler, nb_elt n'est pas une variable (tu pensais à ch.nb_elt) Ton test est faux, c'est la queue qu'il faut définir et mieux vaut vérifier la taille de la liste en te reposant sur la logique interne. Tu devrais définir le chainon intégralement avant de l'utiliser, et donc faire pm->elt = e; juste avant le pm->succ = ch.tete;Sinon, la logique du code est bonne. voici ton code, dûment commenté pour que tu comprennes Code :
Code :
Code :
ainsi, afficher le contenu du chainage s'écrirait: Code :
Code :
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
||||||||||||||
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : mai 2011 Messages : 12 ![]() |
Merci beaucoup à vous pour vos indications,
j'ai fais la fonction de suppression : elle ne fonctionne pas en effet au niveau du delete je pense pas vraiment comprendre comment retirer le maillon. Merci d'avance ! ( je vais me coucher )Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Membre émérite
![]() Inscription : février 2009 Messages : 563 ![]() |
Salut,
Plusieurs choses : * Renvois un booléen, true si l'élément a bien été supprimé, false si l'élément n'a pas été trouvé. Il n'est pas trouvé si la liste est vide mais encore si il n'est simplement pas dans la liste. * Tu dois pouvoir te passer de la fonction PositionElement qui ne fait qu'ajouter inutilement de la complexité. Et puis : Code :
for (i = 1; i < PositionElement(ch,e) ;i++) * Ensuite pour en venir à ce qui t'intéresse, ta suppression ne marche pas car tu supprimes le dernier élément, en effet : ne sera vrai que quand courant sera le dernier maillon. Pour te donner un pseudo-code, voici ce que tu pourrais faire : Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com