begin process at 2012 02 07 08:28:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > 40 PROCÉDURES POUR LA GESTION D'UNE LISTE LINÉAIRE CHAÎNÉE ! C++4.52

40 PROCÉDURES POUR LA GESTION D'UNE LISTE LINÉAIRE CHAÎNÉE ! C++4.52


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :listes, linéaires, chaînées, et, pointeurs Niveau :Initié Date de création :07/12/2006 Date de mise à jour :27/02/2008 22:03:40 Vu :6 253

Auteur : bregredj

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Programmed by Billal BEGUERADJ
www.begueradj.50megs.com
contact me at : beg.bill@yahoo.com
Bejaia University.

Bonjour tout le monde ;
Mon code présente 40 procédures pour gérer une liste linéaire chaînée.
Ainsi, un grand nombre de problèmes liés à la manipulation des pointeurs sont bien explicités y compris toutes les mises à jour possibles.
Ce code pourrait inspirer à l'utilisation des listes linéaires chaînées comme une alternative à l'organisation des données sous forme de fichiers.
Ce code marche bien sous l'environnement C++ 4.52.
Toute suggestion, remarque ou -pourquoi pas- une erreur commise sont les bienvenus.
Mais si vous télécharger ce code, alors envoyez-moi un e-mail pour me dire 'Tu es un génie':
b.beguer@yahoo.com.
Merci à tous.

Source

  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<conio.h>
  • #include<iostream.h>
  • struct pointer
  • {
  • int field; // Ce premier champ sert à contenir l'information -en l'occurrence l'entier-
  • // de chaque noeud de la chaine linéaire
  • struct pointer *link; // C'est le pointeur vers la cellule suivante
  • };
  • typedef struct pointer cell; // Ici on tient à définir un type 'cell' sur lequel
  • // on va travailler tout au long du code
  • void display(); //déclaration de la procédure d'affichage
  • cell*create_my_linked_list(); // Déclaration de la fonction qui se charge de
  • // l'implémentation de la liste
  • void remove_the_first_element(); // Déclaration de la procédure qui supprime le
  • // premier élément de notre liste
  • void remove_the_last_element(); // Déclaration de la procédure qui supprime le
  • // dernier élément de la liste
  • void token_removing(); // Déclaration de la procédure de suppression
  • // d'un élément par indice
  • int counting_the_number_of_elements(); // Cette fonction sert à compter le nombre
  • // d'éléments de la liste afin de l'utiliser dans
  • // les opérations de mise à jour par indice
  • // ou tout simplement pour s'en rendre compte
  • // à gré de l'utilisateur
  • void seek_if_val_exists(); // Cette procédure sert à confirmer l'existance
  • // ou non d'un élément dans la liste
  • void seek_the_last_val_occ(); // déclaration de la procédure qui recherche la
  • // dernière occurrence d'une valeur souhaitée
  • void seek_the_number_of_val_occ(); // Déclaration de la procédure qui fournit le
  • // nombre d'occurrence d'une valeur
  • void if_sorted_linked_list(); // Déclaration de la procédure qui vérifie
  • // si la liste est ordonnée en décroissance.
  • void check_if_sorted_linked_list2(); // Déclaration de la procédure qui vérifie si
  • // la liste est trié en terme de croissance
  • cell *create_a_linked_list_without_inverting_it(); // Déclaration de la procédure qui crée la liste
  • // dans l'ordre de leur arrivée,i.e: la liste
  • // ainsi créee ne sera pas inversée lors de son
  • // affichage contrairement à la précédente procédure
  • // de création
  • void quick_sort_my_list(); // Déclaration de la procédure qui trie notre liste
  • // par ordre croissant
  • void quick_sort_my_list2(); // Déclaration de la procédure qui trie notre liste
  • // par ordre croissant
  • void remove_before_a_given_token();
  • cell*head=NULL;
  • cell *created_linked_list=NULL;
  • cell *not_reversed=NULL; // Ce pointeur pour recevoir la liste
  • // créee mais non inversée
  • void add_an_element_at_the_begining_list(); // Déclaration de la procédure qui ajoute un élément
  • // en tete de la liste
  • void ad_an_element_at_the_end_of_the_list(); // Déclaration de la procédure qui insère
  • // un élément en queue de la liste
  • void _delete_my_list(); // Déclaration de la procédure qui efface
  • // tous les éléments de notre liste
  • void _if_this_element_exists(); // Déclaration de la procédure qui vérifie
  • // l'existance d'un élément dans la liste
  • void check_the_negative_elements(); // Déclaration de la procédure qui
  • // affiche tous les éléments négatifs
  • // de la liste
  • void check_the_positive_elements(); // Déclaration de la procédure qui affiche
  • // tous les éléments positifs de la liste
  • void remove_all_the_negative_values(); // Déclaration de la procédure qui supprime
  • // toutes les valeurs négatives de la liste
  • void remove_all_the_positive_values(); // Déclaration de la procédure qui supprime
  • // toutes les valeurs positives de la liste
  • void positive_elements_counting(); // Déclaration de la procédure qui délivre
  • // le nombre d'éléments positifs de la liste
  • void negative_elements_counting(); // Déclaration de la procédure qui délivre
  • // le nombre d'éléments négatifs de la liste
  • void sup_the_middle_values(); // Déclaration de la procédure qui supprime les valeurs
  • // qui sont entre la tete et la queue de la liste
  • void remove_all_the_uneven_values(); // Procédure qui supprime toutes les valeurs impaires
  • void remove_all_the_fair_values(); // Procédure de suppression de toutes les valeurs paires
  • void remove_all_the_multiples_of_a_given_value(); // Procédure de suppression des multiples d'une nombre
  • void check_the_value_div_elements(); // Affichage des diviseurs d'un entier
  • void check_the_value_multiple_elements(); // Affichage des multiples d'un entier
  • void remove_all_the_value_occ(); // Suppression de toutes les occuurences
  • // d'une valeur
  • void invert_my_linked_list(); // Pour créer la liste miroir de
  • // la liste précédemment saisie
  • void multiply_my_linked_list_elements(); // Pour multiplier les éléments de la liste
  • // par un entier
  • void divide_my_linked_list_elements(); // Pour diviser les éléments de la liste
  • // par un entier
  • void add_an_integer_to_my_linked_list_elements(); // Ajouter le meme entier à tous les éléments de
  • // la liste
  • void minus_an_integer_from_my_linked_list_elements(); // Pour soustraire le meme entier
  • // de tous les éléments de la liste
  • void minus_an_integer_from_given_linked_list_element(); // pour soustraire un entier à un
  • // élément donné de la liste
  • void add_an_integer_for_given_linked_list_element(); // Additionner un entier à toutes les occurrences
  • // d'un élément donné de la liste
  • void multiply_an_integer_by_given_linked_list_element(); // Multiplier toutes les occurrences
  • // d'un élément par un entier
  • /* ************************** */
  • /* */
  • /* Début du programme principal */
  • /* */
  • /* *************************** */
  • void main(void)
  • {
  • int my_choice;
  • char reply;
  • int number_of_elements;
  • created_linked_list=create_my_linked_list();
  • clrscr();
  • do
  • {
  • puts("\t\t\t\tGestion des L.L.C.");
  • cout<<"\t\tBillal BEGUERADJ all rights reserved";
  • puts("\n\t\tBienvenue au menu :\n\n");
  • puts("\t\t1\t2\t3\t4");
  • puts("\t\t5\t6\t7\t8");
  • puts("\t\t9\t10\t11\t12");
  • puts("\t\t13\t14\t15\t16");
  • puts("\t\t17\t18\t19\t20");
  • puts("\t\t21\t22\t23\t24");
  • puts("\t\t25\t26\t27\t28");
  • puts("\t\t29\t30\t31\t32");
  • puts("\t\t33\t34\t35\t36");
  • puts("\t\t37\t38\t39\t40");
  • cout<<"\n\n\tRéferrez-vous au fichier PDF ou HTML du code pour voire \n";
  • cout<<"\t\t la correspondance de ces numéros.";
  • cout<<"\n \n\tVeuillez saisir votre choix : ";
  • cin>>my_choice;
  • switch(my_choice)
  • {
  • case 1: display();
  • break;
  • case 2: remove_the_first_element();
  • break;
  • case 3: created_linked_list=create_my_linked_list();
  • break;
  • case 4: remove_the_last_element();
  • break;
  • case 5: number_of_elements=counting_the_number_of_elements();
  • printf("La liste renferme %d éléments",number_of_elements);
  • break;
  • case 6: token_removing();
  • break;
  • case 7: seek_if_val_exists();
  • break;
  • case 8: seek_the_last_val_occ();
  • break;
  • case 9: seek_the_number_of_val_occ();
  • break;
  • case 10: if_sorted_linked_list();
  • break;
  • case 11: check_if_sorted_linked_list2();
  • break;
  • case 12: not_reversed=create_a_linked_list_without_inverting_it();
  • break;
  • case 13: quick_sort_my_list();
  • break;
  • case 14: quick_sort_my_list2();
  • break;
  • case 15: remove_before_a_given_token();
  • break;
  • case 16: add_an_element_at_the_begining_list();
  • break;
  • case 17: ad_an_element_at_the_end_of_the_list();
  • break;
  • case 18: _delete_my_list();
  • break;
  • case 19: _if_this_element_exists();
  • break;
  • case 20: check_the_negative_elements();
  • break;
  • case 21: check_the_positive_elements();
  • break;
  • case 22: remove_all_the_negative_values();
  • break;
  • case 23:remove_all_the_positive_values();
  • break;
  • case 24: positive_elements_counting();
  • break;
  • case 25: negative_elements_counting();
  • break;
  • case 26: sup_the_middle_values();
  • break;
  • case 27: remove_all_the_uneven_values();
  • break;
  • case 28: remove_all_the_fair_values();
  • break;
  • case 29: remove_all_the_multiples_of_a_given_value();
  • break;
  • case 30: check_the_value_div_elements();
  • break;
  • case 31: check_the_value_multiple_elements();
  • break;
  • case 32: remove_all_the_value_occ();
  • break;
  • case 33: invert_my_linked_list();
  • break;
  • case 34: multiply_my_linked_list_elements();
  • break;
  • case 35: divide_my_linked_list_elements();
  • break;
  • case 36: add_an_integer_to_my_linked_list_elements();
  • break;
  • case 37: minus_an_integer_from_my_linked_list_elements();
  • break;
  • case 38: minus_an_integer_from_given_linked_list_element();
  • break;
  • case 39: add_an_integer_for_given_linked_list_element();
  • break;
  • case 40: multiply_an_integer_by_given_linked_list_element();
  • break;
  • default :
  • cout<<"Choix inexistant !";
  • }
  • cout<<"\nAppuez sur ENTREE pour continuer sinon sur la lettre q : ";
  • reply=getch();
  • }while((reply!='q')&&(reply!='Q')); // On évite l'amalgame des traits de
  • // la lettre q (miniscule ou majuscule
  • // soit-elle )
  • } /* Fin du programme principal */
  • /* **************************************** */
  • /* */
  • /* Implémentation de la fonction qui se */
  • /* charge de la création de */
  • /* notre liste */
  • /* */
  • /* ***************************************** */
  • cell *create_my_linked_list()
  • {
  • /* Déclaration des paramètres locaux de cette fonction */
  • int n; /* Pour le nombre d'éléments à saisir */
  • int i; /* Un compteur jusqu'à n */
  • int number; /* l'entier 'i' à saisir */
  • cell *ptr; /* Pointeur intermédiaire */
  • do
  • {
  • clrscr();
  • cout<<"\tDonnez le nombre d\'éléments de votre liste: ";
  • cin>>n;
  • }while(n<=0); /* Ici, il est recommandé de forcer l'utilisateur à
  • saisir quand meme au moins un entier pour nous permettre
  • procéder aux différentes opérations possibles sur les listes;
  • auquel cas à quoi bon, d'ailleurs !?
  • */
  • for(i=0;i<n;i++)
  • {
  • ptr=(cell*)malloc(sizeof(cell));
  • cout<<"Veuillez Saisir un entier : ";
  • scanf("%3d",&number); // On puit supprimer la variable 'number'
  • ptr->field=number; //dans ce cas, on écrirai simplement
  • ptr->link=head; // scanf("%d",&p->info); et puis, p->svt=head;
  • head=ptr;
  • }
  • return head;
  • }
  • /* ************************************************************** */
  • /* */
  • /* Définition de la procédure d'affichage des éléments */
  • /* de la liste */
  • /* */
  • /* *************************************************************** */
  • void display()
  • {
  • cell*node=head;
  • if(node==NULL)
  • {
  • cout<<" La liste est vide! -suppression de tous les éléments-";
  • }else
  • { cout<<" Voici la liste résultante : \n";
  • while(node!=NULL)
  • {
  • printf("%3d",node->field);
  • node=node->link;
  • }
  • }
  • }
  • /* ************************************************************** */
  • /* */
  • /* */
  • /* Implémentation de la procédure qui fait la suppression */
  • /* du premier élément de notre */
  • /* liste */
  • /* */
  • /* */
  • /* ************************************************************** */
  • void remove_the_first_element()
  • {
  • // Un pointeur-variable locale
  • cell *ptr;
  • if (head==NULL) // On teste si la liste est vide ou pas
  • {
  • puts("\n La liste est déjà vide !");
  • }else // Si la liste n'est pas vide on procède à la suppression
  • {
  • ptr=head;
  • head=head->link;
  • free(ptr);
  • if(head==NULL)
  • {
  • puts("\n Vous venez de supprimer l\'unique élément de la liste !");
  • }else
  • {
  • display();
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procedure qui se charge de la */
  • /* suppression du dernier élément de la liste */
  • /* */
  • /* ********************************************************************* */
  • void remove_the_last_element()
  • {
  • cell *ptr=head;//pointeur local à cette procedure
  • cell *ptr2=head;
  • if(ptr==NULL)
  • {
  • cout<<"La liste est déjà vide !"; // On teste si la liste est vide
  • }else
  • {
  • if(ptr->link==NULL) // Le cas où la liste renferme un seul élément
  • {
  • head=NULL; // Il faut commencer pat ceci dans le souci de la
  • free(ptr); // protection de la mémoire
  • cout<<" Vous venez de supprimez l\'unique élément de la liste !";
  • }else
  • {
  • while(ptr->link!=NULL)
  • {
  • ptr2=ptr;
  • ptr=ptr->link;
  • }
  • ptr2->link=NULL;
  • free(ptr);
  • display();
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la fonction qui prend en charge */
  • /* le comptage du nombre d'éléments que la */
  • /* liste contient */
  • /* */
  • /* ********************************************************************* */
  • int counting_the_number_of_elements()
  • {
  • int i=0; // Compteur du nombre d'éléments
  • cell *ptr=head;
  • if(ptr==NULL)
  • {
  • return 0;
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • i++;
  • ptr=ptr->link;
  • }
  • return i;
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de la suppression */
  • /* d'un élément par indice */
  • /* */
  • /* ******************************************************************** */
  • void token_removing()
  • {
  • int token; /* indice de l'élément à supprimer */
  • int length=counting_the_number_of_elements(); // longuer de la liste
  • int counter=1;
  • cell*ptr1=head;
  • cell*ptr2=head;
  • do
  • {
  • cout<<" Donnez l\'indice de l'élément à supprimer (à partir de 1) : ";
  • cin>>token;
  • }while(token<=0);
  • if(token>length)
  • {
  • printf(" Votre liste renferme moins de %d éléments !");
  • }else
  • {
  • if(token==1)
  • {
  • remove_the_first_element();
  • }else
  • {
  • while(counter!=token)
  • {
  • ptr2=ptr1;
  • ptr1=ptr1->link;
  • counter++;
  • }
  • printf(" L\'élément d\'indice %d existe ;",token);
  • printf("il s\'agit de %d ",ptr1->field);
  • ptr2->link=ptr1->link;
  • free(ptr1);
  • printf("\n Et voici la liste après la suppression de l\'élément d'indice %d\n",token);
  • display();
  • }
  • }
  • }
  • /* ******************************************************************** */
  • /* */
  • /* */
  • /* Implémentation de la procédure qui vérifie la première occurrence */
  • /* d'une valeur donnée dans la liste */
  • /* */
  • /* */
  • /* ********************************************************************* */
  • void seek_if_val_exists()
  • {
  • int val; // Pour la valeur à vérifier l'existance au sein de la liste
  • int pos=1; // Pour l'indice de la 1ère occurrence de la valeur val
  • // val à chercher dans la liste -le cas où elle s'y trouve.
  • cell *ptr=head;
  • puts(" Introduisez la valeur à vérifier l'existance dans la liste :");
  • cin>>val;
  • while((ptr!=NULL)&&(ptr->field!=val))
  • {
  • pos++;
  • ptr=ptr->link;
  • }
  • if(ptr!=NULL)
  • {
  • printf(" %d existe en 1ère occurrence à la position %d dans la liste.",val,pos);
  • }else
  • {
  • printf(" La liste ne renferme pas la valeur %d.",val);
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la fonction qui délivre l'indice de la dernière */
  • /* occurrence d'une valeur donnée */
  • /* */
  • /* ********************************************************************** */
  • void seek_the_last_val_occ()
  • {
  • int pos=0; // Pour l'indice de la dernière occurrence
  • // si val existe
  • int val1; // Pour la valeur à chercher dans la liste
  • cell*ptr=head; // Pointeur de parcours
  • cout<<"Saisissez une valeur pour vérifier sa dernière occurrence.\n";
  • scanf("%d",&val1);
  • if(ptr==NULL)
  • {
  • puts(" Désolé, mais la liste est vide !");
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field==val1)
  • {
  • pos++;
  • }
  • ptr=ptr->link;
  • }if(pos==0)
  • {
  • printf("La valeur %d n\'existe pas dans la liste.",val1);
  • }else
  • {
  • printf(" %d existe en dernière occurrence dans la liste en position %d",val1,pos);
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui délivre le nombre d'occurrences */
  • /* d'une valeur donnée */
  • /* */
  • /* ******************************************************************** */
  • void seek_the_number_of_val_occ()
  • {
  • int pos=0; // Pour l'indice de la dernière occurrence
  • // si val existe
  • int val1; // Pour la valeur à chercher dans la liste
  • cell*ptr=head; // Pointeur de parcours
  • cout<<"Saisissez une valeur pour vérifier sa dernière occurrence.\n";
  • scanf("%d",&val1);
  • if(ptr==NULL)
  • {
  • puts(" Désolé, mais la liste est vide !");
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field==val1)
  • {
  • pos++;
  • }
  • ptr=ptr->link;
  • }if(pos==0)
  • {
  • printf("La valeur recherchée n\'existe pas dans la liste.");
  • }else
  • {
  • printf(" %d existe en %d exemplaires dans la liste",val1,pos);
  • }
  • }
  • }
  • /* ******************************************************************** */
  • /* */
  • /* Implémentation de la procédure qui vérifie si notre */
  • /* est triée en décroissant */
  • /* */
  • /* ********************************************************************* */
  • void if_sorted_linked_list()
  • {
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • puts(" La liste est vide : donc triée.");
  • }else
  • {
  • if(ptr->link==NULL)
  • {
  • cout<<" La liste renferme un seul élément : donc triée.";
  • }else
  • {
  • while((ptr->link!=NULL)&&(ptr->field>=ptr->link->field))
  • {
  • ptr=ptr->link;
  • }if(ptr->link==NULL)
  • {
  • cout<<" La liste est triée en décroissant.\n";
  • }else
  • {
  • cout<<" La liste n\'est pas ordonnée en décroissance.\n";
  • }
  • }
  • }
  • }
  • /* ******************************************************************** */
  • /* */
  • /* Implémentation de la procédure qui vérifie si notre */
  • /* est triée en croissant */
  • /* */
  • /* ********************************************************************* */
  • void check_if_sorted_linked_list2()
  • {
  • cell*ptr=head; // Pointeur local qui reçoit la tete de liste principale
  • if(ptr==NULL)
  • {
  • puts(" La liste est vide : donc triée."); // On teste si la liste est vide
  • }else
  • {
  • if(ptr->link==NULL)
  • {
  • cout<<" La liste renferme un seul élément : donc triée."; //C'est le cas où la liste possède un unique élément
  • }else
  • {
  • while((ptr->link!=NULL)&&(ptr->field<=ptr->link->field))
  • {
  • ptr=ptr->link;
  • }if(ptr->link==NULL)
  • {
  • cout<<" La liste est triée en croissant.\n";
  • }else
  • {
  • cout<<" La liste n\'est pas ordonnée en croissance.\n";
  • }
  • }
  • }
  • }
  • /* *********************************************************************** */
  • /* */
  • /* Implémentation de la procédure qui crée une liste sans */
  • /* l'inverser à l'affichage */
  • /* */
  • /* *********************************************************************** */
  • cell* create_a_linked_list_without_inverting_it()
  • {
  • // Déclaration des variables locales
  • cell*precedent=NULL; // Pour le pointeur qui sauvegarde l'adresse du pointeur
  • // précédent déja crée
  • cell*actual=NULL; // Pour le pointeur courant
  • int datum;
  • int err;
  • do
  • {
  • cout<<" Veuiellez saisir un entier (une lettre pour arreter) : ";
  • err=scanf("%d",&datum);
  • if(err<=0) break; // Pour rendre le nombre de variables lues sans erreur
  • actual=(cell*)malloc(sizeof(cell));
  • actual->field=datum;
  • if(precedent==NULL)
  • {
  • head=actual;
  • }else
  • {
  • precedent->link=actual;
  • }
  • precedent=actual;
  • }while(1); // fin de la boucle do
  • actual->link=NULL;
  • return head;
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui trie notre liste */
  • /* dans l'ordre croissant */
  • /* */
  • /* ********************************************************************* */
  • void quick_sort_my_list()
  • /* le premier ne sera peut-être plus le même donc passage par adresse */
  • {
  • int ok;
  • cell *precedent=NULL;
  • cell*actual=NULL;
  • cell*after=NULL;
  • do
  • {
  • ok=1; /* vrai */
  • precedent=NULL;
  • actual=head;
  • after=actual->link;
  • while(after!=NULL)
  • {
  • if(actual->field > after->field)
  • {
  • ok=0;
  • if(precedent!=NULL) precedent->link=after; else head=after;
  • actual->link=after->link;
  • after->link=actual;
  • }
  • precedent=actual;
  • actual=after;
  • after=actual->link;
  • }
  • }
  • while(!ok);
  • puts("\n --- Tri décroissant de la liste ---");
  • display(); // Appel à la fonction d'affichage
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui trie notre liste */
  • /* par ordre décroissant */
  • /* */
  • /* ********************************************************************* */
  • void quick_sort_my_list2()
  • /* le premier ne sera peut-être plus le même donc passage par adresse */
  • {
  • int ok;
  • cell *precedent=NULL;
  • cell*actual=NULL;
  • cell*after=NULL;
  • do
  • {
  • ok=1; /* vrai */
  • precedent=NULL;
  • actual=head;
  • after=actual->link;
  • while(after!=NULL)
  • {
  • if(actual->field < after->field)
  • {
  • ok=0;
  • if(precedent!=NULL) precedent->link=after; else head=after;
  • actual->link=after->link;
  • after->link=actual;
  • }
  • precedent=actual;
  • actual=after;
  • after=actual->link;
  • }
  • }
  • while(!ok);
  • puts("\n --- Tri croissant de la liste ---");
  • display(); // appel à la fonction d'affichage
  • }
  • /* ************************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime l'élement qui vient */
  • /* après l'indice d'un autr élément de la liste */
  • /* */
  • /* ************************************************************************* */
  • void remove_before_a_given_token()
  • {
  • cell*ptr1=head;
  • cell*ptr2=ptr1->link;
  • cell*ptr3=NULL;
  • int k=0;
  • int index; // Pour l'indice de l'élément dont on veut supprimer le prédécesseur
  • int length =counting_the_number_of_elements(); // Pour s'enquérir sur la longueur de la liste
  • if(length==0)
  • {
  • cout<<" Désolé, la liste est déjà vide !";
  • }
  • if(length==1)
  • {
  • cout<<" La liste contient un seul élément qui n'a pas de sucesseur !";
  • }
  • if(length>=2)
  • {
  • do
  • {
  • cout<<"\n L'indice (>=2) de l'élément à suprrimer son successeur : ";
  • cin>>index;
  • if((index==0)||(index==1))
  • {
  • cout<<" On ne puit supprimer avant l'indice 0 ou 1 !";
  • continue;
  • }
  • }while((index==0)||(index==1));
  • }
  • if(index>length)
  • {
  • printf(" La liste contient moins de %d éléments !",index);
  • }
  • if((ptr2->link==NULL)&&(index==2))
  • {
  • ptr1->link=NULL;
  • free(ptr1);
  • display();
  • };
  • if(ptr2->link!=NULL)
  • {
  • while((k<index)&&(ptr2->link!=NULL))
  • {
  • ptr3=ptr1;
  • ptr2=ptr2->link;
  • ptr1=ptr1->link;
  • k++;
  • }
  • ptr3->link=ptr1->link;
  • ptr1->link=NULL;
  • free(ptr1);
  • display();
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui insère un élément en */
  • /* tete de la liste */
  • /* */
  • /* ********************************************************************** */
  • void add_an_element_at_the_begining_list()
  • {
  • cell*p=NULL;
  • int value; // Pour l'entier à y insérer en tete
  • cout<<" Veuillez saisir l\'entier à insérer en tete de la liste : ";
  • scanf("%d",&value);
  • p=(cell*)malloc(sizeof(cell));
  • p->field=value;
  • p->link=head;
  • head=p;
  • puts(" *** Insertion en tete ***");
  • display(); // Appel à la procédure d'affichage pour voir le résultat
  • //d'insertion
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui insère un élément en fin */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void ad_an_element_at_the_end_of_the_list()
  • {
  • cell *p=NULL;
  • cell *ptr=head;
  • int value;
  • cout<<" Veuillez sasir l\'entier à insérer en queue de la liste : ";
  • cin>>value;
  • p=(cell*)malloc(sizeof(cell));
  • p->field=value;
  • p->link=NULL;
  • if(ptr==NULL) // c'est le cas où la liste est vide
  • {
  • ptr=p;
  • head=ptr;
  • display();
  • }else
  • {
  • if(ptr->link==NULL) // le cas où la liste contient un seul élément
  • {
  • ptr->link=p;
  • head=ptr;
  • display();
  • }else
  • {
  • while(ptr->link!=NULL) // le cas où la liste contient 2 ou plus d'éléments
  • {
  • ptr=ptr->link;
  • }
  • ptr->link=p;
  • display();
  • }
  • }
  • }
  • /* ********************************************************************** */
  • /* */
  • /* Implémentation de la procédure qui efface toute la liste */
  • /* */
  • /* ********************************************************************** */
  • void _delete_my_list()
  • {
  • cell*p1=head;
  • cell*p2=NULL;
  • if(p1==NULL)
  • {
  • cout<<" La liste est déjà vide !";
  • }else
  • {
  • while(p1!=NULL)
  • {
  • p2=p1->link;
  • free(p1);
  • p1=p2;
  • }
  • head=p1;
  • cout<< " La liste est à présent vierge (choisir 1 pour confirmation)";
  • }
  • }
  • /* ********************************************************************** */
  • /* */
  • /* Implémentation de la procédure qui vérifie si un élément existe */
  • /* dans la liste */
  • /* */
  • /* ********************************************************************** */
  • void _if_this_element_exists()
  • {
  • cell *ptr=head;
  • int value;
  • cout<<" Veuillez saisir l\'entier à vérifier l\'existance dans la liste : ";
  • cin>>value;
  • if(ptr==NULL)
  • {
  • cout<<" Désolé, la liste est vide !";
  • }else
  • {
  • while((ptr!=NULL)&&(ptr->field!=value))
  • {
  • ptr=ptr->link;
  • }
  • if(ptr==NULL)
  • {
  • printf(" %d n\'existe dans la liste.",value);
  • }else
  • {
  • printf(" %d Existe bien dans la liste.",value);
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui affiche les éléments négatifs */
  • /* de la liste linéaire chainée */
  • /* */
  • /* ********************************************************************* */
  • void check_the_negative_elements()
  • {
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • puts(" Voici la liste des éléments négatifs de la liste :");
  • while(ptr!=NULL)
  • {
  • if(ptr->field<0)
  • {
  • printf("%4d",ptr->field);
  • k++;
  • }
  • ptr=ptr->link;
  • }
  • if(k==0)
  • {
  • cout<<" La liste ne renferme aucun élément négatif.";
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui affiche les éléments positis */
  • /* de la liste linéaire chainée */
  • /* */
  • /* ********************************************************************* */
  • void check_the_positive_elements()
  • {
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • puts(" Voici la liste des éléments positifs de la liste :");
  • while(ptr!=NULL)
  • {
  • if(ptr->field>0)
  • {
  • printf("%4d",ptr->field);
  • k++;
  • }
  • ptr=ptr->link;
  • }
  • if(k==0)
  • {
  • cout<<" La liste ne renferme aucun élément positif.";
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime toutes les valeurs négatives*/
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void remove_all_the_negative_values()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field>0)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • k++;
  • }
  • ptr=ptr->link;
  • head=pp;
  • }
  • }
  • if(k!=0)
  • {
  • puts(" Suppression des éléments négatifs :");
  • display();
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime toutes les valeurs positives*/
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void remove_all_the_positive_values()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field<0)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • k++;
  • }
  • ptr=ptr->link;
  • head=pp;
  • }
  • }
  • if(k!=0)
  • {
  • puts(" Suppression des éléments positifs :");
  • display();
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui affiche les éléments positis */
  • /* de la liste linéaire chainée */
  • /* */
  • /* ********************************************************************* */
  • void positive_elements_counting()
  • {
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field>0)
  • {
  • k++;
  • }
  • ptr=ptr->link;
  • }
  • if(k==0)
  • {
  • cout<<" La liste ne renferme aucun élément positif.";
  • }
  • else
  • {
  • printf(" La liste renferme %d éléments positifs.",k);
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui affiche les éléments négatifs */
  • /* de la liste linéaire chainée */
  • /* */
  • /* ********************************************************************* */
  • void negative_elements_counting()
  • {
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field<0)
  • {
  • k++;
  • }
  • ptr=ptr->link;
  • }
  • if(k==0)
  • {
  • cout<<" La liste ne renferme aucun élément négatif.";
  • }
  • else
  • {
  • printf(" La liste renferme %d éléments négatifs.",k);
  • }
  • }
  • }
  • /* ********************************************************************** */
  • /* */
  • /* Implémentation de la procédure qui supprime les valeurs qui sont */
  • /* entre la tete et la queue */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void sup_the_middle_values()
  • {
  • cell*p=NULL;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide !";
  • }else
  • {
  • if(ptr->link==NULL)
  • {
  • cout<<" La liste contient un seul élément : cet élément est à la fois la tete et la queue!.";
  • }else
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=NULL;
  • head=p;
  • while(ptr->link!=NULL)
  • {
  • ptr=ptr->link;
  • head->link=ptr;
  • }
  • puts(" Supression des éléments existants entre la tete et la queue :");
  • display();
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime tous les nombres */
  • /* impairs de la liste */
  • /* */
  • /* ********************************************************************** */
  • void remove_all_the_uneven_values()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field%2==0)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • k++;
  • }
  • ptr=ptr->link;
  • head=pp;
  • }
  • }
  • if(k!=0)
  • {
  • puts(" Suppression des valeurs impaires:");
  • display();
  • }else
  • {
  • cout<<" ... Liste vide !.";
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime tous les nombres */
  • /* pairs de la liste */
  • /* */
  • /* ********************************************************************** */
  • void remove_all_the_fair_values()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • int k=0;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • if(ptr->field%2!=0)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • k++;
  • }
  • ptr=ptr->link;
  • head=pp;
  • }
  • }
  • if(k!=0)
  • {
  • puts(" Suppression des valeurs paires:");
  • display();
  • }else
  • {
  • cout<<" ... Liste vide !.";
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime tous les nombres */
  • /* pairs de la liste */
  • /* */
  • /* ********************************************************************** */
  • void remove_all_the_multiples_of_a_given_value()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • int k=0;
  • int value;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Saisissez le multiple de quel nombre que vous souhaitez supprimer: ";
  • cin>>value;
  • while(ptr!=NULL)
  • {
  • if(ptr->field%value!=0)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • k++;
  • }
  • ptr=ptr->link;
  • head=pp;
  • }
  • }
  • if(k!=0)
  • {
  • printf(" Suppression des multiples de %d\n",value);
  • display();
  • }else
  • {
  • cout<<" ... Liste vide !.";
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui affiche les éléments positis */
  • /* de la liste linéaire chainée */
  • /* */
  • /* ********************************************************************* */
  • void check_the_value_div_elements()
  • {
  • int k=0;
  • cell*ptr=head;
  • int value;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Vous souhaitez afficher les diviseurs de quel entier ? ";
  • cin>>value;
  • printf(" Voici la liste des diviseurs de %d :\n",value);
  • while(ptr!=NULL)
  • {
  • if(value%ptr->field==0)
  • {
  • printf("%4d",ptr->field);
  • k++;
  • }
  • ptr=ptr->link;
  • }
  • if(k==0)
  • {
  • printf(" La liste ne renferme pas des diviseurs de %d.",value);
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui affiche les multiples d'un */
  • /* dans la liste linéaire chainée */
  • /* */
  • /* ********************************************************************* */
  • void check_the_value_multiple_elements()
  • {
  • int k=0;
  • cell*ptr=head;
  • int value;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Vous souhaitez afficher les multiples de quel entier ? ";
  • cin>>value;
  • printf(" Voici la liste des multiples de %d :\n",value);
  • while(ptr!=NULL)
  • {
  • if(ptr->field%value==0)
  • {
  • printf("%4d",ptr->field);
  • k++;
  • }
  • ptr=ptr->link;
  • }
  • if(k==0)
  • {
  • printf(" La liste ne renferme pas des multiples de %d.",value);
  • }
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui supprime toutes les occurrences */
  • /* d'un élément de la liste */
  • /* */
  • /* ********************************************************************** */
  • void remove_all_the_value_occ()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • int k=0;
  • int value;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Saisissez l\'enttier dont vous souhaitez supprimer les occurrences : ";
  • cin>>value;
  • while(ptr!=NULL)
  • {
  • if(ptr->field!=value)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • k++;
  • }
  • ptr=ptr->link;
  • head=pp;
  • }
  • cout<<" Suppression de toutes les occurrences de :"<<value<<"\n";
  • display();
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui crée la liste miroir de la */
  • /* liste saisie */
  • /* */
  • /* ********************************************************************** */
  • void invert_my_linked_list()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • head=pp;
  • }
  • cout<<" Liste miroir :\n";
  • display();
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de la multiplication */
  • /* de tous les éléments */
  • /* de la liste par un entier */
  • /* */
  • /* ********************************************************************** */
  • void multiply_my_linked_list_elements()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Multiplication fois quel entier ? : ";endl;
  • cin>>number;
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field*number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • head=pp;
  • }
  • cout<<" Après multiplication des éléments par "<<number;endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de la division */
  • /* de tous les éléments */
  • /* de la liste par un entier */
  • /* */
  • /* ********************************************************************** */
  • void divide_my_linked_list_elements()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • do
  • {
  • cout<<" Division sur quel entier ? : ";endl;
  • cin>>number;
  • }while(number==0); // on évite la division par 0
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field/number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • head=pp;
  • }
  • cout<<" Division entière des éléments par "<<number;endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de l'addition */
  • /* d'un entier à tous les élments */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void add_an_integer_to_my_linked_list_elements()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Additionner quel entier aux éléments de la liste ? : ";endl;
  • cin>>number;
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field+number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • head=pp;
  • }
  • cout<<" Addition de "<<number<<" aux éléments de la liste ";endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de la soustraction */
  • /* d'un entier à tous les élments */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void minus_an_integer_from_my_linked_list_elements()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Soustraire quel entier aux éléments de la liste ? : ";endl;
  • cin>>number;
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • p->field=ptr->field-number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • head=pp;
  • }
  • cout<<" Soustraction de"<<number<<" aux éléments de la liste ";endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de la soustraction */
  • /* d'un entier à un élément donné */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void minus_an_integer_from_given_linked_list_element()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • int value;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Soustraire quel entier ? : ";endl;
  • cin>>number;
  • cout<<" De quel élément de la liste ? :";endl;
  • cin>>value;
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • if(ptr->field==value)
  • {
  • p->field=ptr->field-number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }else
  • {
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • }
  • head=pp;
  • cout<<" Après soustraction de "<<number<<" à toutes les occurrences de "<<value<< ":";endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de l'addition */
  • /* d'un entier à un élément donné */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void add_an_integer_for_given_linked_list_element()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • int value;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Additionner quel entier ? : ";endl;
  • cin>>number;
  • cout<<" Pour quel élément de la liste ? :";endl;
  • cin>>value;
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • if(ptr->field==value)
  • {
  • p->field=ptr->field+number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }else
  • {
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • }
  • head=pp;
  • cout<<" Après addition de "<<number<<" à toutes les occurrences de "<<value<< ":";endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • }
  • /* ********************************************************************* */
  • /* */
  • /* Implémentation de la procédure qui se charge de l'addition */
  • /* d'un entier à un élément donné */
  • /* de la liste */
  • /* */
  • /* ********************************************************************** */
  • void multiply_an_integer_by_given_linked_list_element()
  • {
  • cell*p=NULL;
  • cell*pp=NULL;
  • cell*ptr=head;
  • int number;
  • int value;
  • if(ptr==NULL)
  • {
  • cout<<" La liste est vide.";
  • }else
  • {
  • cout<<" Multiplier par quel entier ? : ";endl;
  • cin>>number;
  • cout<<" Pour quel élément de la liste ? :";endl;
  • cin>>value;
  • while(ptr!=NULL)
  • {
  • p=(cell*)malloc(sizeof(cell));
  • if(ptr->field==value)
  • {
  • p->field=ptr->field*number;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }else
  • {
  • p->field=ptr->field;
  • p->link=pp;
  • pp=p;
  • ptr=ptr->link;
  • }
  • }
  • head=pp;
  • cout<<" Après multiplication de "<<number<<" fois toutes les occurrences de "<<value<< ":";endl;
  • invert_my_linked_list(); // on inverse le résultat car la liste est inversée
  • }
  • }


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


	struct pointer
			{
			int field; // Ce premier champ sert à contenir l'information -en l'occurrence l'entier-
						  // de chaque noeud de la chaine linéaire
			struct pointer *link; // C'est le pointeur vers la cellule suivante
			};
	typedef struct pointer cell;    // Ici on tient à définir un type 'cell' sur lequel
											  // on va travailler tout au long du code


	void display();                     //déclaration de la procédure d'affichage
	cell*create_my_linked_list();       // Déclaration de la fonction qui se charge de
													//      l'implémentation de la liste
	void remove_the_first_element();    // Déclaration de la procédure qui supprime le
													//      premier élément de notre liste
	void remove_the_last_element();     // Déclaration de la procédure qui supprime le
													//      dernier élément de la liste
	void token_removing();              // Déclaration de la procédure de suppression
													//       d'un élément par indice
	int counting_the_number_of_elements();  // Cette fonction sert à compter le nombre
													// d'éléments de la liste afin de l'utiliser dans
													// les opérations de mise à jour par indice
													// ou tout simplement pour s'en rendre compte
													//        à gré de l'utilisateur
	void seek_if_val_exists();          // Cette procédure sert à confirmer l'existance
													//       ou non d'un élément dans la liste
	void seek_the_last_val_occ();       // déclaration de la procédure qui recherche la
													// dernière occurrence d'une valeur souhaitée
	void seek_the_number_of_val_occ();  //  Déclaration de la procédure qui fournit le
													//     nombre d'occurrence d'une valeur
	void if_sorted_linked_list();       //  Déclaration de la procédure qui vérifie
													//  si la liste est ordonnée en décroissance.

	void check_if_sorted_linked_list2();      // Déclaration de la procédure qui vérifie  si
													// la liste est trié en terme de croissance
	cell *create_a_linked_list_without_inverting_it(); // Déclaration de la procédure qui crée la liste
															 // dans l'ordre de leur arrivée,i.e: la liste
															 // ainsi créee ne sera pas inversée lors de son
															 // affichage contrairement à la précédente procédure
															 // de création
	void quick_sort_my_list();                 // Déclaration de la procédure qui trie notre liste
															 // par ordre croissant
	void quick_sort_my_list2();                // Déclaration de la procédure qui trie notre liste
															 // par ordre croissant
	void remove_before_a_given_token();
	cell*head=NULL;
	cell *created_linked_list=NULL;
	cell *not_reversed=NULL;                   // Ce pointeur pour recevoir la liste
															 // créee mais non inversée

	void add_an_element_at_the_begining_list(); // Déclaration de la procédure qui ajoute un élément
															  // en tete de la liste
	void ad_an_element_at_the_end_of_the_list(); //  Déclaration de la procédure qui insère
																// un élément en queue de la liste
	void _delete_my_list();                      // Déclaration de la procédure qui efface
																// tous les éléments de notre liste
	void _if_this_element_exists();              // Déclaration de la procédure qui vérifie
																// l'existance d'un élément dans la liste
	void check_the_negative_elements();          // Déclaration de la procédure qui
																// affiche tous les éléments négatifs
																// de la liste
	void check_the_positive_elements();        // Déclaration de la procédure qui affiche
																// tous les éléments positifs de la liste

	void remove_all_the_negative_values();       // Déclaration de la procédure qui supprime
																// toutes les valeurs négatives de la liste
	void remove_all_the_positive_values();       // Déclaration de la procédure qui supprime
																// toutes les valeurs positives de la liste
	void positive_elements_counting();           // Déclaration de la procédure qui délivre
																// le nombre d'éléments positifs de la liste
	void negative_elements_counting();           // Déclaration de la procédure qui délivre
																// le nombre d'éléments négatifs de la liste
	void sup_the_middle_values();						// Déclaration de la procédure qui supprime les valeurs
																// qui sont entre la tete et la queue de la liste
	void remove_all_the_uneven_values();          // Procédure qui supprime toutes les valeurs impaires
	void remove_all_the_fair_values();           // Procédure de suppression de toutes les valeurs paires
	void remove_all_the_multiples_of_a_given_value(); // Procédure de suppression des multiples d'une nombre
	void check_the_value_div_elements();              // Affichage des diviseurs d'un entier
	void check_the_value_multiple_elements();         // Affichage des multiples d'un entier
	void remove_all_the_value_occ();                  // Suppression de toutes les occuurences
																	  // d'une valeur
	void invert_my_linked_list();                     // Pour créer la liste miroir de
																	  // la liste précédemment saisie
	void multiply_my_linked_list_elements();          // Pour multiplier les éléments de la liste
																	  // par un entier
	void divide_my_linked_list_elements();            // Pour diviser les éléments de la liste
																	  // par un entier
	void add_an_integer_to_my_linked_list_elements();  // Ajouter le meme entier à tous les éléments de
																		// la liste
	void minus_an_integer_from_my_linked_list_elements(); // Pour soustraire le meme entier
																		  // de tous les éléments de la liste
	void minus_an_integer_from_given_linked_list_element(); // pour soustraire un entier à un
																			 // élément donné de la liste
	void add_an_integer_for_given_linked_list_element(); // Additionner un entier à toutes les occurrences
																		  // d'un élément donné de la liste
	void multiply_an_integer_by_given_linked_list_element(); // Multiplier toutes les occurrences
																			  // d'un élément par un entier



	/*  **************************  */
	/*                              */
	/* Début du programme principal */
	/*                              */
	/*  *************************** */
	void main(void)

	{
	int my_choice;
	char reply;
	int number_of_elements;


	created_linked_list=create_my_linked_list();
	clrscr();
	do
	 {
	  puts("\t\t\t\tGestion des L.L.C.");
	  cout<<"\t\tBillal BEGUERADJ all rights reserved";
	  puts("\n\t\tBienvenue au menu :\n\n");
	  puts("\t\t1\t2\t3\t4");
	  puts("\t\t5\t6\t7\t8");
	  puts("\t\t9\t10\t11\t12");
	  puts("\t\t13\t14\t15\t16");
	  puts("\t\t17\t18\t19\t20");
	  puts("\t\t21\t22\t23\t24");
	  puts("\t\t25\t26\t27\t28");
	  puts("\t\t29\t30\t31\t32");
	  puts("\t\t33\t34\t35\t36");
	  puts("\t\t37\t38\t39\t40");
	  cout<<"\n\n\tRéferrez-vous au fichier PDF ou HTML du code pour voire \n";
	  cout<<"\t\t   la correspondance de ces numéros.";
	  cout<<"\n \n\tVeuillez saisir votre choix :    ";
	  cin>>my_choice;
	  switch(my_choice)
		 {

		 case 1: display();
					break;
		 case 2: remove_the_first_element();
					break;
		 case 3: created_linked_list=create_my_linked_list();
					break;
		 case 4: remove_the_last_element();
					break;
		 case 5: number_of_elements=counting_the_number_of_elements();
					printf("La liste renferme %d éléments",number_of_elements);
					break;
		 case 6: token_removing();
					break;
		 case 7: seek_if_val_exists();
					break;
		 case 8: seek_the_last_val_occ();
					break;
		 case 9: seek_the_number_of_val_occ();
					break;
		 case 10: if_sorted_linked_list();
					break;
		 case 11: check_if_sorted_linked_list2();
					break;
		 case 12: not_reversed=create_a_linked_list_without_inverting_it();
					 break;
		 case 13: quick_sort_my_list();
					 break;
		 case 14: quick_sort_my_list2();
					 break;
		 case 15: remove_before_a_given_token();
					 break;
		 case 16: add_an_element_at_the_begining_list();
					 break;
		 case 17: ad_an_element_at_the_end_of_the_list();
					 break;
		 case 18: _delete_my_list();
					 break;
		 case 19: _if_this_element_exists();
					 break;
		 case 20: check_the_negative_elements();
					 break;
		 case 21: check_the_positive_elements();
					 break;
		 case 22: remove_all_the_negative_values();
					 break;
		 case 23:remove_all_the_positive_values();
					break;
		 case 24: positive_elements_counting();
					break;
		 case 25: negative_elements_counting();
					break;
		 case 26: sup_the_middle_values();
					break;
		 case 27: remove_all_the_uneven_values();
					break;
		 case 28: remove_all_the_fair_values();
					break;
		 case 29: remove_all_the_multiples_of_a_given_value();
					break;
		 case 30: check_the_value_div_elements();
					break;
		 case 31: check_the_value_multiple_elements();
					break;
		 case 32: remove_all_the_value_occ();
					break;
		 case 33: invert_my_linked_list();
					break;
		 case 34: multiply_my_linked_list_elements();
					break;
		 case 35: divide_my_linked_list_elements();
					break;
		 case 36: add_an_integer_to_my_linked_list_elements();
					break;
		 case 37: minus_an_integer_from_my_linked_list_elements();
				  break;
		 case 38: minus_an_integer_from_given_linked_list_element();
				  break;
		 case 39: add_an_integer_for_given_linked_list_element();
				  break;
		 case 40: multiply_an_integer_by_given_linked_list_element();
				  break;
		 default :
					cout<<"Choix inexistant !";
		 }
		 cout<<"\nAppuez sur ENTREE pour continuer sinon sur la lettre q : ";
		 reply=getch();
		 }while((reply!='q')&&(reply!='Q'));     // On évite l'amalgame des traits de
															 // la lettre q (miniscule ou majuscule
															 //               soit-elle )




	 } /* Fin du programme principal */




	/*   ****************************************  */
	/*                                             */
	/*    Implémentation de la fonction qui se     */
	/*           charge de la création de          */
	/*                notre liste                  */
	/*                                             */
	/*  *****************************************  */
	cell *create_my_linked_list()
	{

	/* Déclaration des paramètres locaux de cette fonction */

	int n;  /* Pour le nombre d'éléments à saisir */
	int i;  /* Un compteur jusqu'à n */
	int number; /* l'entier 'i' à saisir */
	cell *ptr; /* Pointeur intermédiaire */

	do
	 {
	 clrscr();
	 cout<<"\tDonnez le nombre d\'éléments de votre liste:  ";
	 cin>>n;
	 }while(n<=0);   /* Ici, il est recommandé de forcer l'utilisateur à
								saisir quand meme au moins un entier pour nous permettre
								procéder aux différentes opérations possibles sur les listes;
								auquel cas à quoi bon, d'ailleurs !?
						  */


	for(i=0;i<n;i++)
	  {
		 ptr=(cell*)malloc(sizeof(cell));
		 cout<<"Veuillez Saisir un entier :  ";
		 scanf("%3d",&number); // On puit supprimer la variable 'number'
		 ptr->field=number;      //dans ce cas, on écrirai simplement
		 ptr->link=head;         // scanf("%d",&p->info); et puis, p->svt=head;
		 head=ptr;
	  }
		return head;
	  }



	 /*  **************************************************************  */
	 /*                                                                  */
	 /*      Définition de la procédure d'affichage des éléments         */
	 /*                        de la liste                               */
	 /*                                                                  */
	 /*  *************************************************************** */
	 void display()
		{
		cell*node=head;
		if(node==NULL)
		  {
		  cout<<" La liste est vide! -suppression de tous les éléments-";
		  }else
			  {   cout<<" Voici la liste résultante : \n";
					while(node!=NULL)
					  {
					  printf("%3d",node->field);
					  node=node->link;
					  }
			  }
		  }




	 /*  ************************************************************** */
	 /*                                                                 */
	 /*                                                                 */
	 /*  Implémentation de la procédure qui fait la suppression         */
	 /*                  du premier élément de notre                    */
	 /*                           liste                                 */
	 /*                                                                 */
	 /*                                                                 */
	 /*  ************************************************************** */
	 void remove_the_first_element()
		{

		// Un pointeur-variable locale
		cell *ptr;
		if (head==NULL)    // On teste si la liste est vide ou pas
			{
			puts("\n La liste est déjà vide !");

			}else       // Si la liste n'est pas vide on procède à la suppression
				 {
				 ptr=head;
				 head=head->link;
				 free(ptr);
				 if(head==NULL)
					{
					puts("\n Vous venez de supprimer l\'unique élément de la liste !");

					}else
						{
						 display();

						}
				 }
		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /*       Implémentation de la procedure qui se charge  de la              */
	 /*          suppression du dernier élément de la liste                    */
	 /*                                                                        */
	 /*  ********************************************************************* */
	 void remove_the_last_element()
	 {
	 cell *ptr=head;//pointeur local à cette procedure
	 cell *ptr2=head;

	 if(ptr==NULL)
	  {
		cout<<"La liste est déjà vide !"; // On teste si la liste est vide
	  }else
			{
			if(ptr->link==NULL) // Le cas où la liste renferme un seul élément
			  {
			  head=NULL;        // Il faut commencer pat ceci dans le souci de la
			  free(ptr);        //     protection de la mémoire
			  cout<<" Vous venez de supprimez l\'unique élément de la liste !";
			  }else
				  {
					 while(ptr->link!=NULL)
						 {
						  ptr2=ptr;
						  ptr=ptr->link;
						  }
					 ptr2->link=NULL;
					 free(ptr);
					 display();
				  }
			  }
			}






	 /*  ********************************************************************* */
	 /*                                                                        */
	 /*          Implémentation de la fonction qui prend en charge             */
	 /*             le comptage du nombre d'éléments que la                    */
	 /*                          liste contient                                */
	 /*                                                                        */
	 /*  ********************************************************************* */

	 int counting_the_number_of_elements()
	 {
	 int i=0;    // Compteur du nombre d'éléments
	 cell *ptr=head;
	 if(ptr==NULL)
		{
		return 0;
		}else
			{
			  while(ptr!=NULL)
					{
					 i++;
					 ptr=ptr->link;
					 }
			 return i;
			 }
	 }




	  /*  ********************************************************************* */
	 /*                                                                        */
	 /*    Implémentation de la procédure qui se charge de la suppression      */
	 /*                         d'un élément par indice                        */
	 /*                                                                        */
	 /*  ********************************************************************  */
	 void token_removing()
	 {
	 int token; /* indice de l'élément à supprimer */
	 int length=counting_the_number_of_elements(); // longuer de la liste
	 int counter=1;
	 cell*ptr1=head;
	 cell*ptr2=head;

	 do
	  {
		cout<<" Donnez l\'indice de l'élément à supprimer (à partir de 1) :   ";
		cin>>token;
	  }while(token<=0);
	 if(token>length)
		{
		printf(" Votre liste renferme moins de %d éléments !");
		}else
			{
			 if(token==1)
			  {
			  remove_the_first_element();
			  }else
				 {
					while(counter!=token)
					 {
					 ptr2=ptr1;
					 ptr1=ptr1->link;
					 counter++;
					 }
				printf(" L\'élément d\'indice %d existe ;",token);
				printf("il s\'agit de %d ",ptr1->field);
				ptr2->link=ptr1->link;
				free(ptr1);
				printf("\n Et voici la liste après la suppression de l\'élément d'indice %d\n",token);
				display();
		  }
		}
	 }



	 /*  ********************************************************************  */
	 /*                                                                        */
	 /*                                                                        */
	 /*  Implémentation de la procédure qui vérifie la première occurrence     */
	 /*               d'une valeur donnée dans la liste                        */
	 /*                                                                        */
	 /*                                                                        */
	 /*  ********************************************************************* */
	 void seek_if_val_exists()
	 {
	 int val;     // Pour la valeur à vérifier l'existance au sein de la liste
	 int pos=1;   // Pour l'indice de la 1ère occurrence de la valeur val
					// val à chercher dans la liste -le cas où elle s'y trouve.
	 cell *ptr=head;
	 puts(" Introduisez la valeur à vérifier l'existance dans la liste :");
	 cin>>val;
	 while((ptr!=NULL)&&(ptr->field!=val))
		  {
			pos++;
			ptr=ptr->link;
		  }
	 if(ptr!=NULL)
		{
		printf(" %d existe en 1ère occurrence à la position %d dans la liste.",val,pos);
		}else
			{
			printf(" La liste ne renferme pas la valeur %d.",val);
			}
	 }


	 /*  ********************************************************************* */
	 /*                                                                        */
	 /*  Implémentation de la fonction qui délivre l'indice de la dernière     */
	 /*                  occurrence d'une valeur donnée                        */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void seek_the_last_val_occ()
	 {
	 int pos=0;  // Pour l'indice de la dernière occurrence
					 //      si val existe
	 int val1;    // Pour la valeur à chercher dans la liste
	 cell*ptr=head;   // Pointeur de parcours
	 cout<<"Saisissez une valeur pour vérifier sa dernière occurrence.\n";
	 scanf("%d",&val1);
	 if(ptr==NULL)
		{
		 puts(" Désolé, mais la liste est vide !");
		}else
			{
			 while(ptr!=NULL)
				 {
				 if(ptr->field==val1)
					{
					pos++;
					}
				 ptr=ptr->link;
				 }if(pos==0)
					{
					 printf("La valeur %d n\'existe pas dans la liste.",val1);
					}else
						{
						 printf(" %d existe en dernière occurrence dans la liste en position %d",val1,pos);
						}
			 }
	 }





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /*  Implémentation de la procédure qui délivre le nombre d'occurrences    */
	 /*                     d'une valeur donnée                                */
	 /*                                                                        */
	 /*  ********************************************************************  */
	 void seek_the_number_of_val_occ()
	 {
	 int pos=0;  // Pour l'indice de la dernière occurrence
					 //      si val existe
	 int val1;    // Pour la valeur à chercher dans la liste
	 cell*ptr=head;   // Pointeur de parcours
	 cout<<"Saisissez une valeur pour vérifier sa dernière occurrence.\n";
	 scanf("%d",&val1);
	 if(ptr==NULL)
		{
		 puts(" Désolé, mais la liste est vide !");
		}else
			{
			 while(ptr!=NULL)
				 {
				 if(ptr->field==val1)
					{
					pos++;
					}
				 ptr=ptr->link;
				 }if(pos==0)
					{
					 printf("La valeur recherchée n\'existe pas dans la liste.");
					}else
						{
						 printf(" %d existe en %d exemplaires dans la liste",val1,pos);
						}
			 }
	 }



	 /*  ********************************************************************  */
	 /*                                                                        */
	 /*        Implémentation de la procédure qui vérifie si notre             */
	 /*                       est triée en décroissant                         */
	 /*                                                                        */
	 /*  ********************************************************************* */
	 void if_sorted_linked_list()
	 {
	 cell*ptr=head;
	 if(ptr==NULL)
		{
		puts(" La liste est vide : donc triée.");
		}else
		  {
		  if(ptr->link==NULL)
			{
			 cout<<" La liste renferme un seul élément : donc triée.";
			}else
				{
				while((ptr->link!=NULL)&&(ptr->field>=ptr->link->field))
					 {
					 ptr=ptr->link;
					 }if(ptr->link==NULL)
						 {
						  cout<<" La liste est triée en décroissant.\n";
						 }else
							{
							 cout<<" La liste n\'est pas ordonnée en décroissance.\n";
							}
				 }
			}
	}





	 /*  ********************************************************************  */
	 /*                                                                        */
	 /*        Implémentation de la procédure qui vérifie si notre             */
	 /*                         est triée en croissant                         */
	 /*                                                                        */
	 /*  ********************************************************************* */
	 void check_if_sorted_linked_list2()
	 {
	 cell*ptr=head;     // Pointeur local qui reçoit la tete de liste principale
	 if(ptr==NULL)
		{
		puts(" La liste est vide : donc triée.");      // On teste si la liste est vide
		}else
		  {
		  if(ptr->link==NULL)
			{
			 cout<<" La liste renferme un seul élément : donc triée."; //C'est le cas où la liste possède un unique élément
			}else
				{
				while((ptr->link!=NULL)&&(ptr->field<=ptr->link->field))
					 {
					 ptr=ptr->link;
					 }if(ptr->link==NULL)
						 {
						  cout<<" La liste est triée en croissant.\n";
						 }else
							{
							 cout<<" La liste n\'est pas ordonnée en croissance.\n";
							}
				 }
			}
	}




	/* *********************************************************************** */
	/*                                                                         */
	/*    Implémentation de la procédure qui crée une liste sans               */
	/*              l'inverser à l'affichage                                   */
	/*                                                                         */
	/* *********************************************************************** */
	cell* create_a_linked_list_without_inverting_it()
	{
	 // Déclaration des variables locales
	 cell*precedent=NULL;  // Pour le pointeur qui sauvegarde l'adresse du pointeur
								  // précédent déja crée
	 cell*actual=NULL;     // Pour le pointeur courant
	 int datum;
	 int err;


	 do
	  {
	  cout<<" Veuiellez saisir un entier (une lettre pour arreter) :  ";
	  err=scanf("%d",&datum);
	  if(err<=0) break; // Pour rendre le nombre de variables lues sans erreur
	  actual=(cell*)malloc(sizeof(cell));
	  actual->field=datum;
	  if(precedent==NULL)
		 {
		 head=actual;
		 }else
			{
			precedent->link=actual;
			}
	  precedent=actual;
		}while(1);  // fin de la boucle do
	  actual->link=NULL;
	  return head;
	  }




	  /* ********************************************************************* */
	  /*                                                                       */
	  /*      Implémentation de la procédure qui trie notre liste              */
	  /*                    dans l'ordre croissant                             */
	  /*                                                                       */
	  /* ********************************************************************* */
 void	  quick_sort_my_list()
/* le premier ne sera peut-être plus le même donc passage par adresse */
 {
  int ok;
  cell *precedent=NULL;
  cell*actual=NULL;
  cell*after=NULL;
  do
	{
	 ok=1; /* vrai */
	 precedent=NULL;
	 actual=head;
	 after=actual->link;
	 while(after!=NULL)
	  {
		if(actual->field > after->field)
		 {
		  ok=0;
		  if(precedent!=NULL) precedent->link=after; else head=after;
		  actual->link=after->link;
		  after->link=actual;
		 }
		precedent=actual;
		actual=after;
		after=actual->link;
	  }
	}
  while(!ok);
  puts("\n ---  Tri décroissant de la liste  ---");
  display();  // Appel à la fonction d'affichage
 }





	  /* ********************************************************************* */
	  /*                                                                       */
	  /*      Implémentation de la procédure qui trie notre liste              */
	  /*                      par ordre décroissant                            */
	  /*                                                                       */
	  /* ********************************************************************* */
 void	  quick_sort_my_list2()
/* le premier ne sera peut-être plus le même donc passage par adresse */
 {
  int ok;
  cell *precedent=NULL;
  cell*actual=NULL;
  cell*after=NULL;
  do
	{
	 ok=1; /* vrai */
	 precedent=NULL;
	 actual=head;
	 after=actual->link;
	 while(after!=NULL)
	  {
		if(actual->field < after->field)
		 {
		  ok=0;
		  if(precedent!=NULL) precedent->link=after; else head=after;
		  actual->link=after->link;
		  after->link=actual;
		 }
		precedent=actual;
		actual=after;
		after=actual->link;
	  }
	}
  while(!ok);
  puts("\n  ---  Tri croissant de la liste  ---");
  display();  // appel à la fonction d'affichage
 }



 /* ************************************************************************* */
 /*                                                                           */
 /*   Implémentation de la procédure qui supprime l'élement qui vient         */
 /*             après l'indice d'un autr élément de la liste                  */
 /*                                                                           */
 /* ************************************************************************* */
 void remove_before_a_given_token()
 {
 cell*ptr1=head;
 cell*ptr2=ptr1->link;
 cell*ptr3=NULL;
 int k=0;
 int index; // Pour l'indice de l'élément dont on veut supprimer le prédécesseur
 int length =counting_the_number_of_elements(); // Pour s'enquérir sur la longueur de la liste

 if(length==0)
	{
	cout<<" Désolé, la liste est déjà vide !";
	}
 if(length==1)
		 {
		 cout<<" La liste contient un seul élément qui n'a pas de sucesseur !";
		 }
 if(length>=2)
  {
  do
	 {
	 cout<<"\n L'indice (>=2) de l'élément à suprrimer son successeur : ";
	 cin>>index;
	 if((index==0)||(index==1))
		{
		cout<<" On ne puit supprimer avant l'indice 0 ou 1 !";
		continue;
		}
  }while((index==0)||(index==1));
  }

 if(index>length)
				  {
					printf(" La liste contient moins de  %d éléments !",index);
					}
 if((ptr2->link==NULL)&&(index==2))
						  {
						  ptr1->link=NULL;
						  free(ptr1);
						  display();
						  };
 if(ptr2->link!=NULL)
	 {
	  while((k<index)&&(ptr2->link!=NULL))
			{
				ptr3=ptr1;
				ptr2=ptr2->link;
				ptr1=ptr1->link;
				k++;
			}
		ptr3->link=ptr1->link;
		ptr1->link=NULL;
		free(ptr1);
		display();
	 }

	 }





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /*     Implémentation de la procédure qui insère un élément en            */
	 /*                       tete de la liste                                 */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void add_an_element_at_the_begining_list()
	 {

	 cell*p=NULL;
	 int value;     // Pour l'entier à y insérer en tete
	 cout<<" Veuillez saisir l\'entier à insérer en tete de la liste :  ";
	 scanf("%d",&value);
	 p=(cell*)malloc(sizeof(cell));
	 p->field=value;
	 p->link=head;
	 head=p;
	 puts(" *** Insertion en tete ***");
	 display(); // Appel à la procédure d'affichage pour voir le résultat
					//d'insertion
	 }




	 /*  ********************************************************************* */
	 /*                                                                        */
	 /*      Implémentation de la procédure qui insère un élément en fin       */
	 /*                            de la liste                                 */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void ad_an_element_at_the_end_of_the_list()
	 {
	 cell *p=NULL;
	 cell *ptr=head;

	 int value;

	 cout<<" Veuillez sasir l\'entier à insérer en queue de la liste : ";
	 cin>>value;
	 p=(cell*)malloc(sizeof(cell));
	 p->field=value;
	 p->link=NULL;
	 if(ptr==NULL) // c'est le cas où la liste est vide
		{
		ptr=p;
		head=ptr;
		display();
		}else
			{
			if(ptr->link==NULL)  // le cas où la liste contient un seul élément
			  {
			  ptr->link=p;
			  head=ptr;
			  display();
			  }else
				 {
				  while(ptr->link!=NULL) // le cas où la liste contient 2 ou plus d'éléments
					{
					ptr=ptr->link;
					}
				 ptr->link=p;
				 display();
				}
				}
	 }




	 /* ********************************************************************** */
	 /*                                                                        */
	 /*     Implémentation de la procédure qui efface toute la liste           */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void _delete_my_list()
	 {
	 cell*p1=head;
	 cell*p2=NULL;
	 if(p1==NULL)
		{
		cout<<" La liste est déjà vide !";
		}else
		  {
		  while(p1!=NULL)
			  {
			  p2=p1->link;
			  free(p1);
			  p1=p2;
			  }
			  head=p1;
			  cout<< " La liste est à présent vierge (choisir 1 pour confirmation)";
			  }
	 }


	 /* ********************************************************************** */
	 /*                                                                        */
	 /*  Implémentation de la procédure qui vérifie si un élément existe       */
	 /*                        dans la liste                                   */
	 /*                                   													*/
	 /* ********************************************************************** */
	 void _if_this_element_exists()
	 {
	 cell *ptr=head;
	 int value;
	 cout<<" Veuillez saisir l\'entier à vérifier l\'existance dans la liste :  ";
	 cin>>value;
	 if(ptr==NULL)
		{
		cout<<" Désolé, la liste est vide !";
		}else
			{
			while((ptr!=NULL)&&(ptr->field!=value))
			  {
			  ptr=ptr->link;
			  }
			  if(ptr==NULL)
				 {
				 printf(" %d n\'existe dans la liste.",value);
				 }else
					{
					printf(" %d Existe bien dans la liste.",value);
					}
			}
	  }


	  /* ********************************************************************* */
	  /*                                                                       */
	  /*  Implémentation de la procédure qui affiche les éléments négatifs     */
	  /*                    de la liste linéaire chainée                       */
	  /*                                                                       */
	  /* ********************************************************************* */
	  void check_the_negative_elements()
	  {
		int k=0;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  puts(" Voici la liste des éléments négatifs de la liste :");
		  while(ptr!=NULL)
			  {
			  if(ptr->field<0)
				 {
				 printf("%4d",ptr->field);
				 k++;
				 }
				 ptr=ptr->link;
				 }
		  if(k==0)
				  {
				  cout<<" La liste ne renferme aucun élément négatif.";
				  }

		}
	 }



	  /* ********************************************************************* */
	  /*                                                                       */
	  /*  Implémentation de la procédure qui affiche les éléments positis      */
	  /*                    de la liste linéaire chainée                       */
	  /*                                                                       */
	  /* ********************************************************************* */
	  void check_the_positive_elements()
	  {
		int k=0;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  puts(" Voici la liste des éléments positifs de la liste :");
		  while(ptr!=NULL)
			  {
			  if(ptr->field>0)
				 {
				 printf("%4d",ptr->field);
				 k++;
				 }
				 ptr=ptr->link;
				 }
		  if(k==0)
				  {
				  cout<<" La liste ne renferme aucun élément positif.";
				  }

		}
	 }


	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui supprime toutes les valeurs négatives*/
	 /*                            de la liste                                 */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void remove_all_the_negative_values()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  int k=0;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
			  if(ptr->field>0)
				 {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 k++;
				 }
				 ptr=ptr->link;
				 head=pp;
			 }
		  }
		  if(k!=0)
			{
			puts(" Suppression des éléments négatifs :");
			display();
		  }
		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui supprime toutes les valeurs positives*/
	 /*                            de la liste                                 */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void remove_all_the_positive_values()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  int k=0;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
			  if(ptr->field<0)
				 {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 k++;
				 }
				 ptr=ptr->link;
				 head=pp;
			 }
		  }
		  if(k!=0)
			{
			  puts(" Suppression des éléments positifs :");
			  display();

		  }
		}



		/* ********************************************************************* */
	  /*                                                                       */
	  /*  Implémentation de la procédure qui affiche les éléments positis      */
	  /*                    de la liste linéaire chainée                       */
	  /*                                                                       */
	  /* ********************************************************************* */
	  void positive_elements_counting()
	  {
		int k=0;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
			  if(ptr->field>0)
				 {
				 k++;
				 }
				 ptr=ptr->link;
				 }
		  if(k==0)
				  {
				  cout<<" La liste ne renferme aucun élément positif.";
				  }
				  else
					{
					printf(" La liste renferme %d éléments positifs.",k);
					}

		}
	 }




		/* ********************************************************************* */
	  /*                                                                       */
	  /*  Implémentation de la procédure qui affiche les éléments négatifs     */
	  /*                    de la liste linéaire chainée                       */
	  /*                                                                       */
	  /* ********************************************************************* */
	  void negative_elements_counting()
	  {
		int k=0;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
			  if(ptr->field<0)
				 {
				 k++;
				 }
				 ptr=ptr->link;
				 }
		  if(k==0)
				  {
				  cout<<" La liste ne renferme aucun élément négatif.";
				  }
				  else
					{
					printf(" La liste renferme %d éléments négatifs.",k);
					}

		}
	 }



	 /* ********************************************************************** */
	 /*																								*/
	 /*   Implémentation de la procédure qui supprime les valeurs qui sont     */
	 /*                 entre la tete et la queue										*/
	 /*                        de la liste                                     */
	 /*																								*/
	 /* ********************************************************************** */
	 void sup_the_middle_values()
	 {
	 cell*p=NULL;
	 cell*ptr=head;

	 if(ptr==NULL)
	  {
	  cout<<" La liste est vide !";
	  }else
		 {
		 if(ptr->link==NULL)
			{
			cout<<" La liste contient un seul élément : cet élément est à la fois la tete et la queue!.";
			}else
			  {
			  p=(cell*)malloc(sizeof(cell));
			  p->field=ptr->field;
			  p->link=NULL;
			  head=p;
			  while(ptr->link!=NULL)
					{
					ptr=ptr->link;
					head->link=ptr;
					}
					puts(" Supression des éléments existants entre la tete et la queue :");
					display();
			 }

		 }
	}






	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui supprime tous les nombres           */
	 /*                        impairs de la liste                             */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void remove_all_the_uneven_values()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  int k=0;

	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
			  if(ptr->field%2==0)
				 {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 k++;
				 }
				 ptr=ptr->link;
				 head=pp;
			 }
		  }
		  if(k!=0)
			{
			  puts(" Suppression des valeurs impaires:");
			  display();

		  }else
			{
			cout<<" ... Liste vide !.";
			}
		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui supprime tous les nombres           */
	 /*                          pairs de la liste                             */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void remove_all_the_fair_values()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  int k=0;

	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
			  if(ptr->field%2!=0)
				 {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 k++;
				 }
				 ptr=ptr->link;
				 head=pp;
			 }
		  }
		  if(k!=0)
			{
			  puts(" Suppression des valeurs paires:");
			  display();

		  }else
			{
			cout<<" ... Liste vide !.";
			}
		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui supprime tous les nombres           */
	 /*                          pairs de la liste                             */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void remove_all_the_multiples_of_a_given_value()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  int k=0;
	  int value;

	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
			cout<<" Saisissez le multiple de quel nombre que vous souhaitez supprimer: ";
			cin>>value;
		  while(ptr!=NULL)
			  {
				if(ptr->field%value!=0)
				 {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 k++;
				 }
				 ptr=ptr->link;
				 head=pp;
			 }
		  }
		  if(k!=0)
			{
			  printf(" Suppression des multiples de %d\n",value);
			  display();

		  }else
			{
			cout<<" ... Liste vide !.";
			}
		}






	  /* ********************************************************************* */
	  /*                                                                       */
	  /*  Implémentation de la procédure qui affiche les éléments positis      */
	  /*                    de la liste linéaire chainée                       */
	  /*                                                                       */
	  /* ********************************************************************* */
	  void check_the_value_div_elements()
	  {
		int k=0;
	  cell*ptr=head;
	  int value;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Vous souhaitez afficher les diviseurs de quel entier ?  ";
		  cin>>value;
		  printf(" Voici la liste des diviseurs de %d :\n",value);
		  while(ptr!=NULL)
			  {
			  if(value%ptr->field==0)
				 {
				 printf("%4d",ptr->field);
				 k++;
				 }
				 ptr=ptr->link;
				 }
		  if(k==0)
				  {
				  printf(" La liste ne renferme pas des diviseurs de %d.",value);
				  }

		}
	 }






	  /* ********************************************************************* */
	  /*                                                                       */
	  /*  Implémentation de la procédure qui affiche les multiples d'un        */
	  /*                    dans la liste linéaire chainée                     */
	  /*                                                                       */
	  /* ********************************************************************* */
	  void check_the_value_multiple_elements()
	  {
		int k=0;
	  cell*ptr=head;
	  int value;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Vous souhaitez afficher les multiples de quel entier ?  ";
		  cin>>value;
		  printf(" Voici la liste des multiples de %d :\n",value);
		  while(ptr!=NULL)
			  {
			  if(ptr->field%value==0)
				 {
				 printf("%4d",ptr->field);
				 k++;
				 }
				 ptr=ptr->link;
				 }
		  if(k==0)
				  {
				  printf(" La liste ne renferme pas des multiples de %d.",value);
				  }

		}
	 }






	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui supprime toutes les occurrences     */
	 /*                        d'un élément de la liste                        */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void remove_all_the_value_occ()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  int k=0;
	  int value;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Saisissez l\'enttier dont vous souhaitez supprimer les occurrences : ";
		  cin>>value;
		  while(ptr!=NULL)
			  {
				if(ptr->field!=value)
				 {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 k++;
				 }
				 ptr=ptr->link;
				 head=pp;
			 }

			  cout<<" Suppression de toutes les occurrences de :"<<value<<"\n";
			  display();


		}
	 }






	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui crée la liste miroir  de la         */
	 /*                        liste saisie                                    */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void invert_my_linked_list()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field;
				 p->link=pp;
				 pp=p;
				 ptr=ptr->link;
				 }
				 head=pp;
			 }

			  cout<<" Liste miroir :\n";
			  display();


		}






	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de la multiplication      */
	 /*                        de tous les éléments                            */
	 /*                     de la liste par un entier                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void multiply_my_linked_list_elements()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Multiplication fois quel entier ? :  ";endl;
		  cin>>number;
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field*number;
				 p->link=pp;
				 pp=p;
				 ptr=ptr->link;
				 }
				 head=pp;
			 }

			  cout<<" Après multiplication des éléments par "<<number;endl;
			  invert_my_linked_list();   // on inverse le résultat car la liste est inversée


		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de la division            */
	 /*                        de tous les éléments                            */
	 /*                     de la liste par un entier                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void divide_my_linked_list_elements()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  do
		  {
		  cout<<" Division sur quel entier ? :  ";endl;
		  cin>>number;
		  }while(number==0);  // on évite la division par 0
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field/number;
				 p->link=pp;
				 pp=p;
				 ptr=ptr->link;
				 }
				 head=pp;
			 }

			  cout<<" Division entière des éléments par "<<number;endl;
			  invert_my_linked_list();   // on inverse le résultat car la liste est inversée

		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de l'addition             */
	 /*                        d'un entier à tous les élments                  */
	 /*                                   de la liste                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void add_an_integer_to_my_linked_list_elements()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Additionner quel entier aux éléments de la liste ?  : ";endl;
		  cin>>number;
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field+number;
				 p->link=pp;
				 pp=p;
				 ptr=ptr->link;
				 }
				 head=pp;
			 }

			  cout<<" Addition de "<<number<<" aux éléments de la liste ";endl;
			  invert_my_linked_list();   // on inverse le résultat car la liste est inversée

		}




	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de la soustraction        */
	 /*                        d'un entier à tous les élments                  */
	 /*                                   de la liste                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void minus_an_integer_from_my_linked_list_elements()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Soustraire quel entier aux éléments de la liste ?  : ";endl;
		  cin>>number;
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 p->field=ptr->field-number;
				 p->link=pp;
				 pp=p;
				 ptr=ptr->link;
				 }
				 head=pp;
			 }

			  cout<<" Soustraction de"<<number<<" aux éléments de la liste ";endl;
			  invert_my_linked_list();   // on inverse le résultat car la liste est inversée

		}




	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de la soustraction        */
	 /*                        d'un entier à un élément donné                  */
	 /*                                   de la liste                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void minus_an_integer_from_given_linked_list_element()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  int value;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Soustraire quel entier ?  : ";endl;
		  cin>>number;
		  cout<<" De quel élément de la liste ? :";endl;
		  cin>>value;
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 if(ptr->field==value)
					{
					 p->field=ptr->field-number;
					 p->link=pp;
					 pp=p;
					 ptr=ptr->link;
					}else
					  {
						p->field=ptr->field;
						p->link=pp;
						pp=p;
						ptr=ptr->link;
					  }
				  }
				 head=pp;
				 cout<<" Après soustraction de "<<number<<" à toutes les occurrences de "<<value<< ":";endl;
				 invert_my_linked_list();   // on inverse le résultat car la liste est inversée

			  }

		}





	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de l'addition             */
	 /*                        d'un entier à un élément donné                  */
	 /*                                   de la liste                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void add_an_integer_for_given_linked_list_element()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  int value;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Additionner quel entier  ?  : ";endl;
		  cin>>number;
		  cout<<" Pour quel élément de la liste ? :";endl;
		  cin>>value;
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 if(ptr->field==value)
					{
					 p->field=ptr->field+number;
					 p->link=pp;
					 pp=p;
					 ptr=ptr->link;
					}else
					  {
						p->field=ptr->field;
						p->link=pp;
						pp=p;
						ptr=ptr->link;
					  }
				  }
				 head=pp;
				 cout<<" Après addition de "<<number<<" à toutes les occurrences de "<<value<< ":";endl;
				 invert_my_linked_list();   // on inverse le résultat car la liste est inversée

			  }

		}




	 /*  ********************************************************************* */
	 /*                                                                        */
	 /* Implémentation de la procédure qui se charge de l'addition             */
	 /*                        d'un entier à un élément donné                  */
	 /*                                   de la liste                          */
	 /*                                                                        */
	 /* ********************************************************************** */
	 void multiply_an_integer_by_given_linked_list_element()
	 {
	  cell*p=NULL;
	  cell*pp=NULL;
	  cell*ptr=head;
	  int number;
	  int value;
	  if(ptr==NULL)
		{
		cout<<" La liste est vide.";
		}else
		  {
		  cout<<" Multiplier par quel entier  ?  : ";endl;
		  cin>>number;
		  cout<<" Pour quel élément de la liste ? :";endl;
		  cin>>value;
		  while(ptr!=NULL)
			  {
				 p=(cell*)malloc(sizeof(cell));
				 if(ptr->field==value)
					{
					 p->field=ptr->field*number;
					 p->link=pp;
					 pp=p;
					 ptr=ptr->link;
					}else
					  {
						p->field=ptr->field;
						p->link=pp;
						pp=p;
						ptr=ptr->link;
					  }
				  }
				 head=pp;
				 cout<<" Après multiplication de "<<number<<" fois toutes les occurrences de "<<value<< ":";endl;
				 invert_my_linked_list();   // on inverse le résultat car la liste est inversée

			  }

		}






















 Historique

16 février 2008 13:22:41 :
bonjour ... j'ai effacé le fameux I qui gène lors de la compilation.... et puis, très bientôt je vais procéder à implémenter un menu plus adéquat (car l'affichage du menu en cours est tronqué à cause de sa longueur)... merci.
27 février 2008 22:03:40 :
étant donné que le menu est trop long, j'ai procédé à sa mise en oeuvre convivial et surtout utile et visible à la fois.

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

 Sources en rapport avec celle ci

Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70
Source avec Zip FRACTIONS_DLL, UNE DLL QUI CALCULE DES FRACTIONS par ghuysmans99
[C - ANSI] - EXEMPLE D'UTILISATION DES POINTEURS DE FONCTION... par jean84
LISTES DOUBLEMENT CHAÎNÉES par nicolas66
LISTES CHAINÉES BIDIRECTIONNELLES (CREATION DYNAMIQUE) par naim16

Commentaires et avis

Commentaire de exar le 07/12/2006 12:21:23

Oui, une suggestion: tu remplaces les cin>> et cout<< par des scanf et des printf, et tu as un code en C !
Tu n'as pas fait du C++, mais du C compilé avec un compilo C++...
Le C est un langage procédural, alors que C++ est un langage orienté objet.  Autant utiliser ces fonctionnalités !
En attendant, bon code en C.
Bon courage !

Commentaire de yann_lo_san le 07/12/2006 13:54:43

Tu dis toi même C++ 4.52, outre le fait de mélanger puts et cout ect...
Le c++ te permets de faire tout ce travail une seule fois avec les templates !
En effet ta liste ne marche que pour des entiers. Il faut tout refaire pour un autre type, alors qu'avec la généricité c'était fini pour de bon.
Sinon c'est complet.
Bonne continuation.

Commentaire de exar le 07/12/2006 14:02:25

J'ai posté il y a peu un exemple de liste chaînée générique.  Bon, il n'y a pas les 40 fonctions, mais il y a déjà une base...  Je voulais juste montrer le principe.
Voir http://www.cppfrance.com/codes/LISTE-CHAINEE-ORIENTEE-OBJET-BASEE-SUR-TEMPLATES_40445.aspx

Commentaire de yann_lo_san le 07/12/2006 14:08:18

>>EXAR : bonne initiative ! Bravo.

Commentaire de exar le 07/12/2006 14:13:13

YANN_LO_SAN: Merci !
J'étais juste en train de regarder ton blog.  Tu as des idées bien arrêtées, dis-moi !  Ceci dit, je suis assez d'accord...
Bravo d'avoir le courage d'exprimer de telles opinions !

Commentaire de deck_bsd le 07/12/2006 20:28:33

Yop,

Pour palier à ton problème de généralisation, tu peux t'inspiré de ma source : http://www.cppfrance.com/codes/HEADER-POUR-GERER-PILE-DYNAMIQUEMENT_37798.aspx

PS : lol le titre de la source, ça fait très publiciter mdr ;)

Commentaire de exar le 07/12/2006 20:48:20

DECK_BSD: Bien ton code, mais il voulait faire du C++, apparemment...

Commentaire de NitRic le 15/12/2006 20:27:55

ridicule ... cette source devrait être supprimée ...

il utilise cout/puts/printf/cin/scanf/... à la random >> sstream/string/etc. << penses y ...
il utilise malloc()/free() au lieux de new/delete
en C++ on utilise des classes(template encore mieux)
il utilise des variables globals ...
aucun passage d'arguments ...
etc.

il aurait dû faire un tutoriel avec exemples et non une bête source ridicule comme celle ci ...
40 fonctions pour une simple liste chaînée...

#include <stdio.h> << pas bon, c'est <cstdio> en C++
#include <stdlib.h> << pas bon, c'est <cstdlib> en C++
#include <conio.h> << on utilise plus cette « chose »
#include <iostream.h> << pas bon, c'est <iostream>, avec le .h c'est la vieille version(gardée pour compatibiliter avec les vieux softs), sans .h c'est la nouvelle(revisée) et ca ne date pas d'aujourd'hui, t'aurais dû le savoir ...

struct pointer
{
    int field ; // Pour contenir une valeur entière
    struct pointer *link; // Ce champ est pout pointer sur l'élément suivant de la liste
}; I   <<<<<<<<<<<<<<<<< QU'EST-CE QU'IL FAIT LÀ CE « I » ??? (ligne 17)

tu peux m'expliquer cette phrase s'il te plait?
« Ce code marche bien sous >>> l'environnement C++ 4.52. <<< »


Je sais, j'ai été dur mais néanmoins réaliste ... @++;

Commentaire de exar le 15/12/2006 21:00:05

Nitric >> " ridicule ... cette source devrait être supprimée ..."
La mienne que j'ai donnée en référence ?
Si oui, fais mieux, j'attends.  Beaucoups semblent avoir du mal à développer une bête chose comme une liste chaînée.  Je n'en voyait pas l'intérêt, et ayant souvent vu dans la newsletter des "pseudo" listes chainnées, qui servent surtout à des étudiants débutants (je ne vois pas à qui d'autre si on connait  la STL), et je pensais que mon petit code permettrait à faire cesser ces posts inutiles.
Je ne me prends pas pouyr un champion de la prog (Brunews est bcp meilleur !), mais je voulais cesser ces posts inutiles dans la liste des sources transmises dans la newsletter.
Cependant, j'avais l'intention de poster un arbre binaire basé sur le même principe (je ne sais pas encore quand, je n'ai actuellement pas le temps de le faire).
Sois moins agressif, la paix dans le monde est la seule solution !
Mais développe tes arguments pour dire que ma LC est de la M......
Merci !
Bon courage à toi !

PS.S: Je ne poste pas souvent, parce que mes dévelloppements ne me semblent pas utiles pour des particuliers.

Commentaire de NitRic le 16/12/2006 17:33:07

t'aurais dû faire quelque chose de dynamique(modulaire/...), au lieux de ca, t'as fait quelque chose que personne ne peut utiliser, on ne peut que le lire et peut-être, je dis bien « peut-être », apprendre quelque chose « d'utile »

le mieux serait encore d'en faire une lib(why not!), sans fonctions inutiles, comme add_an_integer_for_given_linked_list_element() par exemple ... rien à voir avec les listes chaînées

création d'une liste
destruction d'une liste
ajout d'un élément(une position quelconque)
modification d'un élément, pourquoi pas(modifier la donnée d'un lien)
suppression d'un élément(une position quelconque)
parcourir la liste, soit en simulant un foreach(avec pointeur de fonction) ou avec des routines genre: moveNext/movePrev/etc.
etc.

ca c'est lié aux listes chaînées et c'est simple à comprendre pour TOUT le monde

tu fais un fichier maliste.h et un autre maliste.c en C et t'implémente la liste, avec void* pour les données c'est mieux, sinon en C++ fais une classe template parce que là, t'as tout mélangé

typedef struct laListe
{
  // ...
}laListe;

void laListeInitialise(laListe* liste);
void laListeDetruire(laListe* liste);
etc.

et dans le .c

void laListeInitialise(laListe* liste)
{
  liste->membre = valeur;
  etc.
}
void laListeDetruire(laListe* liste)
{
  // détruit la liste
}
etc.


la liste d'arguments c'est très utile et les variables globals c'est très « môvès » ...

pour savoir créer/manipuler/... une liste chaîné, pas besoin de 40 fonctions, ca embrouille inutillement ...

j'aimerais bien avoir les réponses à mes questions s'il te plait

« cell*create_my_liked_list( ); » c'est beau quand même ... liked_list ... t'aimes bien ta liste, ca ce voit
j'ai remarqué que t'avais pas modifié tes #include ...

Commentaire de bregredj le 25/12/2006 16:40:50

Bonjour ;
Mes réponses, en vrac :
1 : [NitRic le 15/12/2006 20:27:55 ]
             "il utilise des variables globals ...
             aucun passage d'arguments ..."
C'est justement le piège à éviter : essayez de passer la variable globale head comme paramètre
aux procédures implémentées : rien ne puit fonctionner.

2 :
struct pointer
{
    int field ; // Pour contenir une valeur entière
    struct pointer *link; // Ce champ est pout pointer sur l'élément suivant de la liste
}; I   <<<<<<<<<<<<<<<<< QU'EST-CE QU'IL FAIT LÀ CE « I » ??? (ligne 17)

C'est juste une erreur de frappe !

2 : Pour tout le monde : je n'ai pas fait du C++, certes, mais je veux juste dire que j'ai utilisé un
compilateur C++ 4.52. En effet, rares sont les codes que je télécharge et qui s'exécute
sur mon compilateur (il est utile de signaler votre compilateur, je trouve).

Merci pour vos critiques constructives.

Commentaire de begueradj le 28/04/2011 12:57:31

c'est le seul programme qui marche vraiment et sans bugs que je n'ai jamais trouvé sur le web

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème avec les listes chaînées double [ par marik7335 ] Salut,Je comprends le principe des listes chaînées simples mais je n'arrive pas à utiliser les listes chaînées double.Ce que je voudrais faire c'est u Listes chaînées et fichiers binaires [ par asgardia ] Bonjour,J'ai sauvegardé mes listes chaînées dans un fichier texte binaire. Seulement, je ne sais pas comment reconstruire ma liste chaînée à partir de Problème d'afficher avec des listes chainées de pointeurs [ par floralastar03 ] BonjourJe travaille sur un programme qui met en oeuvre des classes d'objets avec des classes héritées et j'ai voulu intégrer des listes chainées de po liste chainée de pointeurs [ par floralastar03 ] BonjourC'EST SUPER URGENT SVPJe travaille sur un programme qui met en oeuvre des classes d'objets avec des classes héritées et j'ai voulu intégrer des Pour assigner un pointeur ... [ par wismerhill__ ] Il me semblait que pour declarer un pointeur il fallait faire double* pointeur = NULL;Mais dans un cours de C++ et des codes, je vois des 0, Peut on d Choix des tableaux ou des listes chainées ? [ par Turok ] Salut, Voila, je débute actuellement avec le C++ et je suit en train de faire un petit jeux avec SDL. Pour ceux qui connaissent, je refais le niveau b Pointeurs ... [ par Ziman ] Bonjour,J'ai une petite question, c'est pas vraiment un probleme de code mais plutot de théorie. Imaginez qu'en global j'ai déclaré un pointeur vers u pointeurs char, char* et tableau [ par bbear ] 'lutj'ai un probleme avec des chaines de caracteres, tableaux de chaines et autres joyeusetéesc'est pour un hiscore. je ne sais pas si la manière de f Listes de virus [ par wizard512 ] Bonsoir a tous,Je suis entrain de créer un anti-virus ( pas en c/c++/c.net )<br / Gestion dymamique de la taille d'un tableau de pointeurs [ par timy94 ] La taille d'un tableau de char lors de la déclaration est char * TAB[5];Comment en cours du programme augmenter la taille de TAB.Je n'arrive pas a uti


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,468 sec (4)

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