C++BuilderX - Listes.c
/* Définiton du type Liste et des opérations élémentaires
sur une liste.
*/
#include <stdio.h>
#include <stdlib.h> //Fonction malloc
//Définition d'une structure pour stocker les éléments d'une liste
struct element { int d;
struct element* suivant;};
//Définition du type Liste
typedef struct element* Liste ;
// Déclaration d'une variable de type Liste
Liste liste=NULL;
//Ajour d'un élément au début de la liste
void listeAjouter(int c)
{ struct element* elt;
//Réservation de l'espace mémoire pour stocker le nouvel élément
elt=(struct element*) malloc(sizeof(struct element )) ;
// L'argument c est copié dans le champ c de elt.
elt->d=c;
// L'ancien premier élément devient maintenant l'élément qui suit
// le nouvel élément
elt->suivant=liste;
//elt est premier élément de la liste
liste=elt;
}
//Insertion d'un nouvel élément après un élément existant dans la liste.
// soit p un pointeur sur cet élément
void liste_Inserer(int c, struct element* p){
struct element* elt;
//Allocation de la mémoire pour le nouvel élément
elt=(struct element*) malloc(sizeof(struct element));
elt->d=c;
//le suivant de p doit être maintenant le suivant de elt
elt->suivant=p->suivant;
// le suivant de p est elt
p->suivant=elt;
}
/* Suppresion d'un élément de la liste.
p est un pointeur sur l'élément qui précéde celui à supprimer
pour supprimer le premier élément de la liste, on passe à la fonction
une valeur nulle.
La liste est supposée contenir au moins un élément*/
void liste_Supprimer(struct element* p){
//Tester si l'élément à supprimer est le premier de la liste
if(p==NULL){
/*Suppression du premier élément de la liste
Le second élément de la liste va devenir maintenant
le premier élément de la liste*/
liste=liste->suivant;
//Libération de l'espace ocuppé par le premier élément
free(liste);
}
else {
/* On doit ici supprimer l'élément qui suit p
Le suivant de l'élément à supprimer doit être
défini comme le suivant de p*/
p->suivant=(p->suivant)->suivant;
//Libération de l'espace occupé par l'élément supprimé
free(p->suivant);
}
}
/* Calcul du nombre d'éléments de la liste*/
int liste_Nombre_elt(){
struct element* l=liste;
int nbElements=0; //Nombre d'éléments de la liste.
while(l!=NULL)
{ nbElements++;
l=l->suivant;
}
return nbElements;
}