Vous êtes sur la page 1sur 3

#include <stdio.

h>
#include <stdlib.h>

// Structure pour représenter un étudiant


typedef struct Etudiant {
int numero;
char nom[50];
char prenom[50];
char dateNaissance[20];
// Ajoutez d'autres champs si nécessaire
struct Note *eval;
float moy;
struct Etudiant *suivant;
} Etudiant;

// Structure pour représenter une note


typedef struct Note {
float valeur;
float coefficient;
struct Note *suivant;
} Note;

// Exercice 1 : Comptage dans une liste chaînée


int compterElements(Etudiant *liste) {
int count = 0;
while (liste != NULL) {
count++;
liste = liste->suivant;
}
return count;
}

// Exercice 2 : Comptage d’occurrences dans une liste chaînée


int compterOccurrences(Etudiant *liste, float valeur) {
int count = 0;
while (liste != NULL) {
if (liste->eval != NULL) {
Note *note = liste->eval;
while (note != NULsize_tL) {
if (note->valeur == valeur) {
count++;
break;
}
note = note->suivant;
}
}
liste = liste->suivant;
}
return count;
}

// Exercice 3 : Vérification d’une liste chaînée triée


int estListeTriee(Etudiant *liste) {
while (liste != NULL && liste->suivant != NULL) {
if (liste->moy > liste->suivant->moy) {
return 0; // Liste non triée
}
liste = liste->suivant;
}
return 1; // Liste triée
}

// Exercice 4 : Insertion en tête de liste chaînée


void insererEnTete(Etudiant **liste, Etudiant *nouvelEtudiant) {
nouvelEtudiant->suivant = *liste;
*liste = nouvelEtudiant;
}

// Exercice 5 : Insertion en queue de liste chaînée


void insererEnQueue(Etudiant **liste, Etudiant *nouvelEtudiant) {
if (*liste == NULL) {
*liste = nouvelEtudiant;
} else {
Etudiant *temp = *liste;
while (temp->suivant != NULL) {
temp = temp->suivant;
}
temp->suivant = nouvelEtudiant;
}
}

// Exercice 6 : Insertion à une position donnée


void insererALaPosition(Etudiant **liste, Etudiant *nouvelEtudiant, int position) {
if (position <= 0) {
insererEnTete(liste, nouvelEtudiant);
return;
}

Etudiant *temp = *liste;


for (int i = 1; i < position - 1 && temp != NULL; i++) {
temp = temp->suivant;
}

if (temp == NULL) {
// La position est plus grande que la taille de la liste
return;
}

nouvelEtudiant->suivant = temp->suivant;
temp->suivant = nouvelEtudiant;
}

// Exercice 7 : Suppression d’un élément d’une liste chaînée à une position donnée
void supprimerALaPosition(Etudiant **liste, int position) {
if (*liste == NULL) {
return; // Liste vide
}

Etudiant *temp = *liste;

if (position == 1) {
*liste = temp->suivant;
free(temp);
return;
}

for (int i = 1; i < position - 1 && temp != NULL; i++) {


temp = temp->suivant;
}

if (temp == NULL || temp->suivant == NULL) {


return; // La position est plus grande que la taille de la liste
}

Etudiant *aSupprimer = temp->suivant;


temp->suivant = aSupprimer->suivant;
free(aSupprimer);
}

// Exercice 8 : Parcours d’une liste circulaire


void traite(Etudiant *element) {
// Fonction à implémenter pour traiter un élément de la liste
printf("Traitement de l'element avec numero %d\n", element->numero);
}

void traite_liste(Etudiant *liste) {


Etudiant *debut = liste;
do {
traite(liste);
liste = liste->suivant;
} while (liste != debut);
}

// Exercice 9 : Insertion d’un élément dans une liste doublement chaînée


void insererAvantValeur(Etudiant **liste, Etudiant *nouvelEtudiant, int valeur) {
Etudiant *trouve = NULL;
Etudiant *temp = *liste;

while (temp != NULL) {


if (temp->numero == valeur) {
trouve = temp;
break;
}
temp = temp->suivant;
}

if (trouve != NULL) {
if (trouve == *liste) {
nouvelEtudiant->suivant = *liste;
*liste = nouvelEtudiant;
} else {
nouvelEtudiant->suivant = trouve;
temp = *liste;
while (temp->suivant != trouve) {
temp = temp->suivant;
}
temp->suivant = nouvelEtudiant;
}
}
}

Vous aimerez peut-être aussi