Les opérations de la liste chainée

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 091 fois - Téléchargée 19 fois

Contenu du snippet

printf("\n\t*******Manipulation De Liste chainée*******\n\n");
printf("\t******************* MENU ******************\n");
printf ("\t1. Ajout au debut de la liste\n");
printf ("\t2. Ajout a la fin de la liste\n");
printf ("\t3. Affichage de la liste\n");
printf ("\t4. Suppression dans la liste\n");
printf ("\t5. Detruire la liste\n");
printf ("\t6. Recherche dans la liste\n");
printf ("\t7. Inverser la liste\n");
printf ("\t8. Tri de la liste\n");
printf ("\t9. Quitter\n");

Source / Exemple :


#include<stdio.h>
#include<stdlib.h>
 
typedef struct liste
       {
         int nbr;
         struct liste *suiv;
       }liste;
 typedef liste *lis;
lis ajoutentete(lis deb,int x)
{   
  liste *g;
  g=malloc(sizeof(liste));
  g->nbr=x;
  g->suiv=deb;
  return g;
}
lis ajoutenfin(lis deb, int valeur)
{
    liste *nouvelElement=malloc(sizeof(liste));
     nouvelElement->nbr = valeur;
     nouvelElement->suiv = NULL;
     if(deb == NULL)
    {
         return nouvelElement;
    }
    else
    {
        liste* temp=deb;
        while(temp->suiv != NULL)
        {
            temp = temp->suiv;
        }
        temp->suiv = nouvelElement;
        return deb;
    }
}
void affiche(lis g)
{
  liste* p=g;
  while(p!=NULL)
  {
     printf("%d==>",p->nbr);
     p=p->suiv;
  }
  printf("NULL\n");
}

lis Supprdebut (lis g,int f)
{ liste *h;
  if(g!=NULL)
   if(g->nbr==f)
    {     
      h=g;
      g=g->suiv;            
      free(h);
    } 
   else
      g->suiv=Supprdebut(g->suiv,f);
      
  return g;
}
lis detruire (lis g)
{ 
 lis d;
  while(g!=NULL)
  { 
   d=g;  
   g=g->suiv;
   free(d);
  }
  return NULL;
}
int recherche(lis deb,int k)
{ 
  while(deb!=NULL)
   {
     if (deb->nbr==k) 
     return 1;
     deb=deb->suiv;
   } 
   return 0;  
}
lis inverser (lis a)
{
 lis p=NULL,q;
while(a!=NULL)
{
 q=a->suiv;
 a->suiv=p;
 p=a;
 a=q;
}
return p;
}
lis tri(lis deb)
{
  lis q=deb,p;
  int v;
  while(q!=NULL)
  {
   p=q->suiv;
   while(p!=NULL)
   {
    if(q->nbr < p->nbr)
     {
       v=p->nbr;
       p->nbr=q->nbr;
       q->nbr=v;
     }
     p=p->suiv;
   }
    q=q->suiv;  
 }
 return deb;
}
int main()
{
  lis k,z=NULL;
  int n,Y,x,t;
  char r;
  do{
     printf("\n\t*******Manipulation De Liste chainée*******\n\n");
     printf("\t******************* MENU ******************\n");
     printf ("\t1. Ajout au debut de la liste\n");
     printf ("\t2. Ajout a la fin de la liste\n");
     printf ("\t3. Affichage de la liste\n");
     printf ("\t4. Suppression dans la liste\n");
     printf ("\t5. Detruire la liste\n");
     printf ("\t6. Recherche dans la liste\n");
     printf ("\t7. Inverser la liste\n");
     printf ("\t8. Tri de la liste\n");
     printf ("\t9. Quitter\n");
     printf("\t*******************************************\n");
     printf ("\nFaites votre choix : ");
     scanf ("%d", &x);
   switch(x)
      {
           case 1: do{ 
                        printf("Entrez nombre: ");
                        scanf("%d",&n);
                        z=ajoutentete(z,n);
                        printf("un autre nombre(O/N):");
                        scanf("%s",&r);
                      }while(r!='n');break;
           case 2: printf("Entrez nombre:");
                    scanf("%d",&Y);
                    z=ajoutenfin(z,Y);
                    break;
           case 3: affiche(z);break;
           case 4:printf("Entrez nombre: ");
                   scanf("%d",&t);
                   z=Supprdebut(z,t);break;

           case 5:detruire(z);break;
           case 6: printf("Entrez nombre a rechercher: ");
                   scanf("%d",&t);
                   if(recherche(z,t)==1)
                   printf("nombre %d existe dans la liste\n",t);
                   else
                   printf("nombre %d n\'existe dans la liste\n",t);
                   break;
           case 7:z=inverser(z);break;
           case 8:z=tri(z);break;
                                   
      } 

 }while (x!=9);
 printf ("TAPPER UNE TOUCHE");
 getche();
   
}

Conclusion :


logiciel de travail est dev c++

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
lundi 30 novembre 2009
Statut
Membre
Dernière intervention
22 mai 2010

excellent.............
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011

Salut,

Quelques remarques (suggérées par un compilateur):

Lignes 51 et 52, il y a deux if et ligne 58 un else; à quel if se rapporte-t-il ? Je sais qu'il y a une réponse, mais on risque toujours de se tromper. Alors autant mettre des accolades !

Ligne 119, une variable k est déclarée; jamais utilisée.

Ligne 170, une fonction inconnue est appelée. Peut-être est-elle connue de dev-C++ mais celui-ci est obsolète...

Enfin, la fonction main DOIT retourner un int (puisqu'elle est déclarée int main())...

---
Venons-en à scanf.
«[scanf] renvoie[...] le nombre d'éléments d'entrées correctement mis en correspondance et assignés. Ce nombre peut être plus petit que le nombre d'éléments attendus, et même être nul, s'il y a une erreur de mise en correspondance.» (le manuel)
Conclusion, il FAUT vérifier quelle est la valeur retournée.
Si l'utilisateur fait une erreur de saisie, le programme peut «boucler» indéfiniment. C'est fâcheux.

---
Dans le cas 5 (du switch principal), il me semble que
z=detruire(z);
serait plus adéquat qu'un simple
detruire(z);

---
Une dernière remarque pour la route. La fonction Supprdebut est-elle récursive à dessein ? Que penserais-tu d'une version récursive comme toutes les autres ?

Ce code servirait encore mieux le néophyte s'il était agrémenté de quelques commentaires.

Bonne prog.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.