begin process at 2012 05 24 01:15:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > LES OPÉRATIONS DE LA LISTE CHAINÉE

LES OPÉRATIONS DE LA LISTE CHAINÉE


 Information sur la source

 Description

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

  • #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();
  • }
#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++


 Sources de la même categorie

ENUM TYPE POUR JAVASCCRIPT par triumphs
Source avec Zip DLL PERSONNALISÉ AVEC ÉVÈNEMENTS ET PROPRIÉTÉS EN VB6. par Number7
Source avec Zip Source .NET (Dotnet) EXEMPLE DU TUTORAIL "CLASSES MÉTIER" par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST... par kbalist
Source avec Zip EXEMPLE SUR LES MENUS POUR AIDER LES DÉBUTANTS COMME MOI ;-) par viragoloco

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CLASS MATRICE C++ par elkasimi2007
Source avec Zip Source avec une capture OP4 UN INTERPRÉTEUR POUR ENTIERS DE TRÈS GRANDE TAILLE par pgl10
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
Source avec Zip COMPARATIF DES TRIS QUADRATIQUE par gnairod

Commentaires et avis

Commentaire de Chouchou182 le 24/04/2010 18:12:42

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.
--
Chouchou.

Commentaire de papou144 le 22/05/2010 18:58:47

excellent.............

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tri dans un tableau a 2 dimension en cpp [ par vivo95 ] Bonjours, je rechercherai comment faire pour faire un tri dans un tableau a 2 dimension, je sais le faire dans un tableua a 1 dim mais la je seche.Mer ajout d'un lecteur virtuel [ par EXOCET ] salut a tous se serait pour savoir comment ajouter un lecteur virtuel dans le poste de travail.merci d'avanceEXOCET B-) tri par comptage et tri de dijkstra. urgent!!! et au secours!!! [ par magicoz ] Bonjour, j'aurais voulu avoir de l'aide pour les tris par comptage et dijkstra.Je ne comprend pas le principe.Est-ce que quelqu'un peut m'expliquer et a l'aide!!!!?!? programme equivalent au DIR de Dos [ par rouxc ] Ce programme doitpermettre de lister des fichiers en parcourant les sous-répertoires avecquelques options de tri pour la sélection et l'affichage des ajout de valeur dans champ access [ par theflucke ] je dois en c++ inserer des donnes dans une dbgrid qui est liee a une table access... le probleme est que soit disant jen suis pas en mode editionj'ai ajout d'un caractere dans un tableau [ par kalf2000 ] salut,g un petit blèm:g un tableau de caractère où g mis un chiffre, aprés avoir utilisé la fct itoa. et il fo que j'insere un autre chiffre avant cel sql, c++ et ajout... [ par xav42 ] Bonjour!!!J'ai un petit probleme: j'aimerai ajouter des choses dans ma base mais pour le moment j'arrive à ajouter uniquement des chose predéfinit...; Help :: Tri-Fusion itératif !! [ par daarkon666 ] Salut !! Je planche actuellement sur une version itérative du Tri-Fusion, et y a un pb : je ne vois pas comment écrire la fonction fusion qui se charg inverse de matrice dynamique [ par anaisa ] Aidez nous please c pr programmer en langage Votre texte ICIC l inverse de la matrice dynamique merci bcp !!!!!! Pb de tri et taille de tableaux [ par daarkon666 ] Salut !!Je viens de terminer le tri/fusion itératif (et d'autres algos de tri, pr un projet info de fac) en C, et je suis soumis à un pb auss ibien so


Nos sponsors


Sondage...

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 : 2,980 sec (4)

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