Untitled
user_7143316
plain_text
2 years ago
6.4 kB
5
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