Untitled
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