Liste chainés

esp95 Messages postés 13 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 25 août 2011 - 15 mars 2010 à 11:54
esp95 Messages postés 13 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 25 août 2011 - 16 mars 2010 à 09:32
esp95,
Bonjour j'aimerais que vous m'aidiez je bloque sur le trie de liste chainés j'ai un problème lorsque les deux dernier éléments de ma liste chainé ne permute pas lors du prochain mon dernière élément pointe toujours sur le précédent qu'il ait changé de place ou non
Merci d'avance

void tri()
{
list List2=listdernier(); //pointeur partant de la fin
bool Permut=true;
ListLecture=Debut;
while(Permut)
{
Permut=false;
while(List2 != ListLecture && List2->prec != NULL)
{
if(strcmp(List2->nom,List2->prec->nom)<0)
{
permut(List2,List2->prec);
Permut=true;
}else
{
// List2->prec=List2->prec->prec;
List2=List2->prec;
}
}
if(List2->prec == NULL)
{
Debut=List2;
ListLecture= Debut;
}else
{
ListLecture = ListLecture->suiv;
}

List2=listdernier();
}
}

2 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
16 mars 2010 à 01:13
Salut,
Si tu veux de l'aide sur un problème de pointeur, il faut exposer le code qui contient les pointeurs.
permut() est déclarée ou ? idem pour des variables dont on ne sait pas d'où elles sortent.


Cordialement, uaip.
0
esp95 Messages postés 13 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 25 août 2011
16 mars 2010 à 09:32
Salut merci de ta réponse désolé pour ce bout de code oublié
ma fonction permut
void permut(list list1, list list2)
{
if(list2->prec==NULL)
{
list2->suiv=list1->suiv;
list1->suiv->prec=list2;
list1->suiv=list2;
list1->prec=NULL;
list2->prec=list1;
Debut=list1;
}else if (list1->suiv==NULL)
{
list2->suiv=NULL;
list1->suiv=list2;
list2->prec->suiv=list1;
list1->prec=list2->prec;
list2->prec=list1;
}else
{
list2->suiv=list1->suiv;
list1->suiv=list2;
list2->prec->suiv=list1;
list1->prec=list2->prec;
list2->prec=list1;

}
}
Et mes déclarations

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//déclaration Structure
struct elem
{
char nom[20] ;
char prenom[20];
char tel[10];
struct elem *suiv ; //pointeur sur l’élément suivant
struct elem *prec ; //pointeur sur l’élément précèdent
};
typedef struct elem element; //structelement = element
typedef element *list ; //pointeur sur la structure élément
list Debut; //pointeur sur l’élément
list courant;
list ListLecture;

//déclaration fonction
int menu();
void chargerfichier();
void tri();
void ajouter();
void sauvegarder();
void supprimer();
void afficher();
list listdernier();
void permut(list list1, list list2);
0