Untitled

 avatar
unknown
plain_text
2 years ago
4.6 kB
13
Indexable
//Algorithmique// 
//TP n°= 4// 
//Les listes chainées// 
//Exercice 2// 
 
#include<stdio.h> 
#include<stdlib.h> 
 
//Déclaration// 
struct cellule{ 
    int val; 
    struct cellule *suivant; 
}; 
typedef struct cellule cellule; 
typedef cellule* Liste; 
 
//Fonction d’initialisation d’une liste chainée// 
cellule* initialiser_Liste(cellule* liste){ 
    liste = NULL; 
    return liste ; 
} 
 
//Fonction Afficher une Liste Chainée// 
void Afficher_Liste(cellule* liste){ 
    if (liste==NULL) 
        printf("La Liste est Vide!!\n"); 
    else{ 
        cellule* tmp = liste; 
        while(tmp != NULL){ 
            printf(" %d ", tmp->val); 
            tmp = tmp->suivant; 
        } 
        printf("\n"); 
    } 
} 
 
//Fonction d’ajouter à la fin de la liste// 
cellule* Ajouter_Fin_Liste(cellule* liste, int valeur){ 
    cellule* newcellule = malloc(sizeof(cellule)); 
    newcellule ->val = valeur; 
    newcellule ->suivant = NULL; 
    if(liste == NULL) 
        return newcellule; 
    else{ 
        cellule* temp = liste; 
        while(temp->suivant != NULL) 
            temp = temp->suivant; 
        temp->suivant = newcellule; 
        return liste; 
    } 
} 
 
//l’affichage du champs val d'une liste// 
//ordre croissant// 
void AfficherCroi(cellule* liste){ 
    if(liste!=NULL){ 
    printf("%d\t",liste->val); 
    AfficherCroi(liste=liste->suivant); 
    } 
} 
 
//ordre decroissant// 
void AfficherDecroi(cellule* liste){ 
    if(liste!=NULL){ 
        AfficherDecroi(liste->suivant); 
        printf("%d\t", liste->val); 
    } 
}

//insersion d'un element dans une liste chainee triee par ordre croissant//
cellule* InsersionTriCroi(cellule* liste,int v){
    cellule* L=liste;
    cellule* P=liste;
    cellule* Q=malloc(sizeof(cellule));
    Q->val=v;
    Q->suivant=NULL;
    if (liste==NULL || (liste->val)>(Q->val)){
	    Q->suivant=liste;
        liste=Q;
		return liste;
	}
    while (P->suivant!=NULL){
        L=P;
        P=P->suivant;
        if((Q->val)<(P->val)){
            Q->suivant=P;
            L->suivant=Q;
            return liste;
        }
    }
    P->suivant=Q;
    return liste;
}

//MENU// 
int main(){ 
    int n,v,i,l; 
    int choix; 
    cellule* ma_liste=malloc(sizeof(cellule)); 
    cellule* my_liste=malloc(sizeof(cellule)); 
 
    printf("********************************LE MENU**********************************\n\n"); 
    printf("1: saisir une liste chainee\n"); 
    printf("2: afficher une liste chainee\n"); 
    printf("3: l'affichage du champs val d'une liste dans l'ordre croissant\n"); 
    printf("4: l'affichage du champs val d'une liste dans l'ordre decroissant\n"); 
    printf("5: insersion d'un element dans une liste chainee triee par ordre croissant\n"); 
    printf("6: verification si une liste est triee par ordre croissant <<iterative>>\n"); 
    printf("7: verification si une liste est triee par ordre croissant <<recursive>>\n"); 
    printf("8: l'inverse d'une liste deja triee en ordre croissant\n"); 
    printf("9: fusionnement de 2 listes dans une seule liste en gardant le meme tri\n"); 
    printf("\n*************************************************************************\n"); 
 
    do{ 
        printf("\nVouiller saisir votre choix:\t"); 
        scanf("%d",&choix); 
        printf("\n"); 
 
        switch(choix){ 
            case 1: 
                printf("Vouiller saisir la taille de votre liste:\t"); 
                scanf("%d",&n); 
                printf("\nVouiller saisir les element de la liste chianee:\n\n"); 
                for(i=0;i<n;i++){ 
                    scanf("%d",&l); 
                    ma_liste=Ajouter_Fin_Liste(ma_liste,l); 
                } 
                break; 
 
            case 2: 
                printf("Votre liste chainee est:\n"); 
                Afficher_Liste(ma_liste); 
                break; 
 
            case 3: 
                printf("l'affichage du champs val de votre liste dans l'ordre croissant est:\n"); 
                AfficherCroi(ma_liste); 
                break; 
 
            case 4: 
                printf("l'affichage du champs val de votre liste dans l'ordre croissant est:\n"); 
                AfficherDecroi(ma_liste); 
                break;
                
            case 5:
                printf("Vouiller saisir une valeur pour l'insere:\n");
                scanf("%d",&v);
                InsersionTriCroi(ma_liste,v);
                printf("Votre liste aprés l'insersion du valeur <<%d>>:\n",v);
                Afficher_Liste(ma_liste); 
        } 
 
    }while(choix!=0); 
 
}
Editor is loading...
Leave a Comment