Untitled

 avatar
user_7143316
plain_text
2 years ago
6.4 kB
4
Indexable
#include <stdio.h>
#include <stdlib.h>
struct liste{
   int val;
   struct liste* suivant;};

  typedef struct liste cel;
void afficher_liste(cel* liste){
  if(liste==NULL)
    printf("la liste est vide.\n");
  else{
    cel* tmp=liste;
    while(tmp!=NULL){
        printf("%d\t",tmp->val);
         tmp=tmp->suivant;
    }
   printf("\n");
  }
}

void afficher_croissante(cel* tmp){
   if (tmp==NULL)
     return;
   else{
     printf("%d ", tmp->val);
     afficher_croissante(tmp->suivant);
}
}

void afficher_decroissante(cel* liste){
    if (liste!=NULL){
       afficher_decroissante (liste->suivant);
       printf("%d ", liste->val);
}
}

cel* Ajouter_Fin_Liste(cel* liste, int valeur){
    cel* newcellule=malloc(sizeof(cel));
    newcellule ->val = valeur;
    newcellule ->suivant=NULL;
    if (liste==NULL)
        return newcellule;
    else{
        cel* temp = liste;
    while (temp->suivant != NULL)
       temp=temp->suivant;
    temp->suivant=newcellule;
    return liste;
    }}
cel* inserer_elemnt_(cel* liste, int v){
     cel* tmp=liste;
     cel* ptmp=tmp;
     cel* p=malloc(sizeof(cel));
     p->val=v;
     if (v<tmp->val){
        p->suivant=tmp;
        liste=p;
        afficher_liste(liste);
        return;}

    while (ptmp->suivant!=NULL){
         if((v>ptmp->val) && (v<tmp->val)){
            ptmp->suivant=p;
            p->suivant=tmp;
          afficher_liste(liste);
          return;
      }
      ptmp=tmp;
      tmp=tmp->suivant;}
      ptmp->suivant=p;
      afficher_liste(liste);
      return;
    }

int ver_tri_i(cel *liste) {
    cel* ptmp = liste;
    cel* tmp = ptmp->suivant;

    while (ptmp->suivant != NULL) {
        if (ptmp->val > tmp->val)
            return 0;
        else {
            ptmp = tmp;
            tmp = tmp->suivant;
        }
    }

    return 1;
}
int ver_tri_r(cel* tmp,cel* ptmp){
    if (ptmp->suivant == NULL) return 1;
    if (ptmp->val > tmp->val) return 0;
    ptmp=tmp;
    tmp=tmp->suivant;
    return ver_tri_r(tmp, ptmp);
}
cel* liste_decroissante (cel* liste){
  cel* liste_invr=malloc(sizeof(cel));
  liste_invr=NULL;
  cel*ptmp=liste;
  cel* tmp;
   while (ptmp!=NULL){
    tmp =malloc(sizeof (cel));
    tmp->val=ptmp->val;
    tmp->suivant=liste_invr;
    liste_invr=tmp;
    ptmp=ptmp->suivant;
   }
    return liste_invr;
}
cel* fusioner_liste(cel* liste1, cel* liste2) {
    cel* liste_fusn = malloc(sizeof(cel));
    cel* p = liste_fusn;
    liste_fusn->suivant = NULL;
    while (liste1 != NULL && liste2 != NULL) {
        if (liste1->val > liste2->val) {
            p->val = liste2->val;
            p->suivant = malloc(sizeof(cel));
            p = p->suivant;
            liste2 = liste2->suivant;
        } else if (liste2->val > liste1->val) {
            p->val = liste1->val;
            p->suivant = malloc(sizeof(cel));
            p = p->suivant;
            liste1 = liste1->suivant;
        } else {
            p->val = liste2->val;
            p->suivant = malloc(sizeof(cel));
            p = p->suivant;
            liste1 = liste1->suivant;
            liste2 = liste2->suivant;
        }
    }
    while (liste1 != NULL) {
        p->val = liste1->val;
        liste1 = liste1->suivant;
        if (liste1 != NULL) {
            p->suivant = malloc(sizeof(cel));
            p = p->suivant;
        }
    }
    while (liste2 != NULL) {
        p->val = liste2->val;
        liste2 = liste2->suivant;
        if (liste2 != NULL) {
            p->suivant = malloc(sizeof(cel));
            p = p->suivant;
        }
    }
    p->suivant = NULL;
    return liste_fusn;
}
int main(){
int choix,i,taille,v,n;
cel* ma_liste_1=NULL;
do{
printf("************************menu***********************\n");
printf("1:  Saisir une liste \n");
printf("2:  Afficher la liste \n");
printf("3:  Afficher croissante version RECURSIVE \n");
printf("4:  Afficher descroissante version RECURSIVE \n");
printf("5:  Inserer un elements dans liste trie \n");
printf("6:  Verifier si la ligte trie version ITERATIVE \n");
printf("7:  Verifier s1 la liste trie version RECURSIVE\n");
printf("8:  Retourner la liste inverse \n");
printf("9:  Fusionner deux listes trees \n");
printf("10: -Quitter le MENU\n");
printf("***************************************************\n");
printf("entrez votre choix:");
scanf("%d",&choix);
system("cls");
switch(choix){
    case 1:{
     printf("entrez la taille de la liste:");
       scanf("%d",&taille);
       printf("entrez les element de la liste\n");
       for(i=0;i<taille;i++){
         scanf("%d",&v);
         ma_liste_1=Ajouter_Fin_Liste(ma_liste_1,v);}
       break;}
    case 2:afficher_liste(ma_liste_1); break;
    case 3: {cel* tmp=ma_liste_1;
    afficher_croissante(tmp);printf("\n"); break;}
    case 4:{cel* tmp=ma_liste_1;
    afficher_decroissante(tmp);printf("\n"); break;}
    case 5:{printf("entrer l'element :");
     scanf("%d",&v);
    ma_liste_1=inserer_elemnt_(ma_liste_1,v);
    break;}
    case 6:{
       if(ver_tri_i(ma_liste_1))
         printf("la liste est trie \n");
       else
        printf("la liste n'est pas trie \n");
      break; }
    case 7:{
        cel* ptmp=ma_liste_1;
        cel* tmp=ptmp->suivant;
        if(ver_tri_r(tmp,ptmp))
            printf("la liste est trie \n");
        else
            printf("la liste n'est pas trie \n");
        break;}
    case 8:{
     cel* liste_inv=NULL;
     liste_inv=liste_decroissante(ma_liste_1);
     afficher_liste(liste_inv);
      break;}
    case 9:{cel* liste1=NULL;
      cel* liste2=NULL;
      cel* liste_fus=NULL;
      printf("entrer la dimension de 1er liste");
       scanf("%d",&n);
      printf("entrer les element de la liste 1:\n");
      for(i=n-1;i>=0;i--){
       scanf("%d",&v);
      liste1=Ajouter_Fin_Liste(liste1,v);}
     printf("entrer la dimension de 2eme liste:");
     scanf("%d",&n);
     printf ("entrer les element de la liste 2 :\n");
     for(i=n-1;i>=0;i--){
       scanf("%d",&v);
      liste2=Ajouter_Fin_Liste(liste2,v);}
      liste_fus=fusioner_liste(liste1,liste2);
      afficher_liste(liste_fus);
      break;}
  default: printf("il y a pas ce nombre dans le Menu essayez encore une fois \n");
}}while (choix!=10);
return 0;
}
Editor is loading...
Leave a Comment