|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : janvier 2013 Messages : 4 ![]() |
Code :
merci encore. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() |
La fonction de suppression repose sur le fait que dans une liste doublement chaînée, un chaînon peut se supprimer de manière complètement indépendante sauf s'il est le premier de la liste; s'il est le premier, il doit modifier le pointeur "premier chaînon" de la liste.
Note: S'il y a aussi un pointeur "dernier élément" pour la liste, le même problème se pose. Ici, les listes sont accessibles dans un tableau global: La seule chose nécessaire pour retrouver le pointeur "premier élément", c'est re-hacher la clé. De plus, il n'y a pas de pointeur "dernier élément". Ainsi, la fonction de suppression fait trois choses:
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#3 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 434 ![]() |
La fonction supprime un élément d'une des listes doublement chainées de la table de hachage. On doit donc réaliser avant destruction de l'élément (le free() ligne 64) le nouveau chainage qui permet de relier ce qui précède (pt_pred ligne 46) dans la liste l'élément à supprimer avec ce qui le suit (pt_succ ligne 45).
Schématiquement (en rouge, l'élément à supprimer) : Avant : table_hachage
...
NULL personne_t----->personne_t---->personne_t---->personne_t---...--->NULL
\ / \ / \ / \ / \
<------- <-------- <-------- <--------- <-------
.... table_hachage
... ------------------>
/ \
NULL personne_t----->personne_t personne_t---->personne_t---...--->NULL
\ / \ / \ / / \
<------- <--------- \<------- / <-----
... <-------------------- table_hachage
... ------------------>
/ \
NULL personne_t----->personne_t personne_t---...--->NULL
\ / \ / \ / \
<------- <--------- \ / <-----
... <--------------------Si il y a un élément qui précède ( if(pt_pred != NULL) ligne 53) alors son nouveau successeur est le successeur de l'élément à enlever ( pt_pred->succ = pt_succ; ligne 55) Si c'est le premier élément de la liste (pas de précédent, ligne58), son adresse figure dans la table de hachage comme début de la liste et il faut changer cette valeur pour celle du nouvel élément de début de la liste, son successeur(ligne 60 et 61) On peut maintenant détruire l'élément qui est sorti du chainage de la liste et du tableau de hachage (ligne 64)
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
20
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : janvier 2013 Messages : 4 ![]() |
Merci à vous je comprend beaucoup mieux la fonction suppression,comme les tables de hachages sont considéré un comme un concept et non comme un aspect du langage c.C'est pas évident d'avoir des exemples concrets une dernière questions pour le code suivant.
Code :
j'aimerais savoir un peu plus en détail le fonctionnement de cette fonction s'il vous plait. |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() |
La fonction a deux étapes:
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : janvier 2013 Messages : 4 ![]() |
Merci tout est claire maintenant.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com