Dans ma fonction Pop, je stocke l'adresse de la tête dans J'ai essayé d'utiliser Le résultat attendu devrait être: p> mais les résultats réels sont p> Temp code>, puis à l'avenir. Lorsque je reçois une impasse dans
Temp code>, je le supprime en attribuant
null code> à celui-ci. Quand j'imprime la pile cependant, il ne retire pas la dernière poussée.
Temp-> suivant = null code>. Ce n'est qu'alors que cela fonctionne, mais si
temp-> suivent = null code> fonctionne. Ne devrait pas
temp = null code> fonctionne aussi? P>
3 Réponses :
La fonction change la variable locale Il peut regarder ce qui suit manière p> maintenant la variable N'oubliez pas de libérer le dernier nœud. P> p> TEMP code> au lieu de changer l'élément de données
suivant code> du nœud avant le dernier nœud de la liste.
TEMP code> Points exactement à l'élément de données
suivant code> du nœud avant le dernier nœud. C'est la liste elle-même modifiée. P>
Votre droit que la pop ne fonctionnerait pas. Tout ce que vous êtes, vous définissez le pointeur Temp sur NULL lorsque vous avez trouvé l'élément de fin. Ce que vous devez faire est de libérer l'élément à Temp d'abord, puis définissez le pointeur qui le pointe de l'élément précédent à NULL.
void pop() { if(head==NULL){ printf("\n no element to pop\n"); } else { struct student* temp=head; struct student* previous=head; while(temp->next!=null){ previous=temp; temp=temp->next; } if(previous!=next) //if there was more than one { previous->next=NULL; } else { head=NULL; } free(temp); } }
Le code temp = null code> définit la variable
TEMP code> sur null, pas le champ
suivant code> de
TEMP code>. Avec ce dernier, il ne retire pas le nœud. P>
J'imagine que la fonction
pop code> pour renvoyer quelque chose .... BTW, vous vraiment i> devrait corriger votre formatage de votre code.
@Hasibur Rahman Shovon Veuillez formater le code pour le rendre lisible.
@Aconcagua non, il a une pile. Il ajoute de nouveaux nœuds à la fin et les apparaît de la fin. :)
Je me suis permis d'ajuster le formatage. Un peu d'espace aide à améliorer la lisibilité, plus important encore, est une indentation constante et cohérente - on peut voir immédiatement lorsque les blocs de code commencent et se terminent sans avoir à rechercher explicitement pour les accolades. Vous pourriez avoir un coup d'oeil différent styles de codage , je vous recommande personnellement à Allman Style (qui est Ce que j'ai formaté votre code).
@Vladfrommosw oh, [@ * # + $!], Négligé que ... alors l'inverse de l'autre côté: une pile utilisant une liste liée est beaucoup plus simple manipulée (et beaucoup plus efficace) si poussant et apparaissant à partir de ...
@Aconcagua je suis d'accord. :)
@Vladfrommoscow '[...] beaucoup plus simple [...]' i> - cette partie était destinée à Hasibur ...
Vous ne libérez pas les nœuds que vous créez, ce qui entraîne une fuite de mémoire. Habituez-vous à dès le départ: chaque
MALLOC code> doit être accompagné d'un code> correspondant code>, donc chaque fois que vous faites le premier, ayez-le en même temps!
L'algorithme ici est un non-sens. Une pile est censée être facile parce qu'on mettez simplement une nouvelle plaque sur le dessus et prenez la plaque la plus haute en fonction des besoins, mais vous mettez la dernière assiette sous la pile ... I.e. Même après i> les correctifs proposés ici c'est des ordures.