begin process at 2012 05 30 03:45:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

liste chaînée en langage c


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

liste chaînée en langage c

mercredi 22 juillet 2009 à 12:14:47 | liste chaînée en langage c

youssefelmessari

messieur j'aun un problème concernat la suprresion d'un élement sur la liste chaînée dont voici le doee source
void suppression(void)// a r e v o i r ;
{
struct employe *precedent,*p;
afficher_liste();
printf("\nQuel numero voulez vous supprimer:");
scanf("%d", &p->Num);
if (p!=debut) /* pas le premier element */
{
p=debut;
while (p->suivant!=p)
p=p->suivant;
p->suivant=p->suivant->suivant;
}
else /* suppression du 1er element */
debut=p->suivant;
je savais pas ou est le probleme merci d'avance

mercredi 22 juillet 2009 à 12:50:34 | Re : liste chaînée en langage c

Bul3

Membre Club

Bonjour,
le mieux c'est de voir ici
Cordialement [mon Site] [M'écrire] Bul

mercredi 22 juillet 2009 à 12:53:05 | Re : liste chaînée en langage c

Bul3

Membre Club

erreur sur le lien ! c'est ici

mercredi 22 juillet 2009 à 13:37:52 | Re : liste chaînée en langage c

rt15

Membre Club Administrateur CodeS-SourceS

Bonjour,

Tu as posté dans :
"A propos des sites CodeS-SourceS / Boîte à idées pour améliorer CodeS-SourceS "

Tu peux m'expliquer en quoi ton idée va améliorer ce site ?

Merci de poster sur un thème C.

Pour ton code... Bin je n'y vois pas grand chose de logique...
Prend un papier, dessine tes structures avec des carrées et des flèches, et traduit ça en code.

mercredi 22 juillet 2009 à 13:54:52 | Re : liste chaînée en langage c

krimog

Administrateur CodeS-SourceS

Salut

En ce qui concerne ton problème, ta conception est clairement erronée.

Si je commente un peu ton code :

Code C/C++ :
void suppression(void) // De manière générale, quand un tube est vide, on ne marque rien, pas void

// De plus, tu ne précises pas de quelle liste du comptes supprimer un élément
{
struct employe *precedent,*p; // Déclaration de variables, mais pas d'initialisation

afficher_liste(); // Afficher quelle liste ?

printf("\nQuel numero voulez vous supprimer:");
scanf("%d", &p->Num); // p n'a pas été initialisé. Pointe sur n'importe quoi.
// Donc écrire dans p->Num plantera dans 99.99% des cas
// Et à quoi correspond Num ? à un identifiant ?

if (p!=debut) // Qu'est-ce que debut ?
// Eviter les variables globales, c'est le meilleur moyen de t'embrouiller
// p n'est toujours pas initialisé => p sera toujours différent de debut (99.99999999% des cas)

{
p=debut;
while (p->suivant!=p) // tant que le prochain élément de la liste n'est pas l'élément actuel ??
// Le dernier élément d'une liste chainée est soit le premier élément (cyclique) soit NULL
// Et si j'ai bien compris ce que tu cherches à faire, il faut que ta condition se fasse sur Num
// while (p->suivant->Num != leNumASupprimer)
// De plus, il est très facile de rentrer dans une boucle infinie
// while (p->suivant != NULL && p->suivant->Num != leNumASupprimer)
// (remplacer NULL par ancre en cas de liste chainée cyclique)
p=p->suivant; // Faire plus attention à la présentation : soit mettre des {} soit mettre sur la même ligne que le while.
// En te lisant, on croirait que l'autre instruction est aussi dans le while

p->suivant=p->suivant->suivant; // Ok, tu enlèves l'élément de la chaine.
// Mais je te conseille quand même de vérifier que c'est bien l'élément que tu veux enlever.
// De plus, tu as oublié de libérer la mémoire
}
else
// Cf. Remarque du while : {} ou même ligne, pour plus de lisibilité.
debut=p->suivant; // Là encore, tu as oublié de libérer ta mémoire



En conclusion :
- évite les variables globales
- découpe en plusieurs fonctions (une pour choisir ton élément à supprimer, et une pour supprimer)
- initialise tes variables
- libère ta mémoire
- et SURTOUT, pour des concepts un peu complexes comme les listes chainées, comme dit rt15, fait tourner ton code A LA MAIN. (tu verrais que tes boucles sont mauvaises, que tu n'as pas libéré la mémoire que des conditions sont mauvaises, et que tu n'as pas initialisé tes variables)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -


Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -



Cette discussion est classée dans : liste, void, debut, langage, chaînée


Répondre à ce message

Sujets en rapport avec ce message

Liste chaînée [ par GoldenEye ] Qu'est ce que qu'une liste chaînée ?Merci liste chaînée et classes [ par yeager ] Bonjour!J'ai programmé pendant deux ans en C et actuellement j'étudie le C++. Pour moi une classe est l'équivalent d'une structure en plus évolué (hér Liste chaînée, besoin d'aide! [ par mystik007 ] Bonjour, je dois coder un programme qui manipule les listes chaînées, j'aurais besoin d'aide pour les fonction (initialiser la liste, allouerNoeud pou liste chainée en C [ par liliefr2000 ] bonjour!!j'ai besoin d'aide s'il vous plait!jai le tp suivant a faire:SujetEcrire un programme qui permet de saisir un texte et de l'afficher à l'écra constructeur de recopie et pointeur sur pointeur [ par popi0016 ] Bonjour je bloque sur la définition d'un constructeur de recopie d'une classe "liste" afin de sortir du programme principale sans provoque une exeptio Arbre en liste chainee (Langage C) [ par Bobo21 ] Salut,J'ai un petit probleme. J'aurais besoin de tranformer un arbre binaire en une liste chainee.En CMERCI Liste chainée en C++ [ par toitoine01 ] Bonjour ds le cadre de ma formation je doit réalisée un projet gestion d'une université j'utilise pour cela une liste chainée pour gerer les enseignan QuickSort : liste chaînée [ par vegeta07 ] Salut, Je souhaite réaliser le tri QuickSort (récursif) sur une liste simplement chaînée. Mais j'ai un probleme sur la recursivité je pense. Si quel une fonction inverser une liste chainee en langage c++ [ par midotueur ] salut, Pouvez vous m'aider? j'ai trouve des defficultees a ecrire une fonction (inverser liste chainee) et merci Deux listes chaînées à comparer et modifier [ par poiuytrez3 ] Bonjour, je suis en train de créer un jeu à la shoot them up. De façon simplifié mon problème est le suivant :j'ai une liste chaînée qui contient des


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales