|
begin process at 2008 07 19 16:45:17
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
40 PROCÉDURES POUR LA GESTION D'UNE LISTE LINÉAIRE CHAÎNÉE ! C++4.52
Information sur la source
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<<"Saisisse |
|