Trie liste chainée simple

Utilisateur anonyme - 10 avril 2006 à 16:21
sebome Messages postés 15 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 septembre 2008 - 12 avril 2006 à 21:59
Bonjour, voila j'essaye d'apprendre à trier une liste chainée mais j'ai quelques soucis

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

struct liste

{

int valeur;

struct liste *suivant; //pointe vers l'élément suivant

};

typedef struct liste liste_s ,*pt_cellule,*liste;

void ajout_tete(pt_cellule *tete,int t)
{
liste_s *nouveau; //nouvelle entrée dans la liste chainée
nouveau= (liste_s *)malloc(sizeof (liste_s)); // on assigne une case memoire pour la nouvelle valeur

nouveau->valeur=t; //la valeur de la nouvelle case prend le scanf (variable t)
nouveau->suivant=*tete; // le pointeur de nouveau pointe sur la tete actuelle pour se lier à un autre maillon
(*tete)=nouveau; //on donne à tete la 1er valeur de la chaine (l'adresse)

}

void affichage(pt_cellule *tete)
{
liste l=*tete;

while(l != NULL)
{
printf("valeur : %d\n",l-> valeur);
l=l->suivant;
}
}

// Voici l'endroit qui me pose probleme
void tri(pt_cellule *tete)
{
liste actuel = *tete;
liste precedent = actuel->suivant;
liste tmp = NULL;

printf("actuel : %d\n",actuel-> valeur);
printf("precedent : %d\n",precedent-> valeur);


while(precedent != NULL)
{

if (actuel < precedent)

{


tmp = precedent;
precedent = actuel;
actuel = tmp ;


};


actuel=actuel->suivant;

}

affichage(tete);


}

int main()
{
int t=-1;

pt_cellule tete=NULL; //pointeur de tete initialisé à 0

while (t!=0)

{

printf("saisie :\n");

scanf("%d",&t);
if (t==0) break;
ajout_tete(&tete,t);

}

affichage(&tete);
tri(&tete);
return 0;
}

1 réponse

sebome Messages postés 15 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 septembre 2008
12 avril 2006 à 21:59
"if (actuel
0
Rejoignez-nous