Vous êtes sur la page 1sur 8

Liste chainée

Exercice 1 : Affichage d’une liste chainée :


Écrivez un programme en C pour créer et afficher une liste chainée.
Données de test :
Entrez le nombre de nœuds: 3
Donnée entrée pour l’élément 1: 5
Donnée entrée pour l’élément 2: 6
Donnée entrée pour l’élément 3: 7

Résultat attendu :
Contenu entré dans la liste:

contenu = 5

contenu = 6

cotenu = 7

C Code:
#include <stdio.h>
#include <stdlib.h>

struct Element
{
int num; //Contenu l’Element
struct Element *nextptr; //Addresse Element suivant
}*stElement;

void createElementList(int n); // fonction pour creation de liste


void displayList(); // fonction d’affichage d’une liste

int main()
{
int n;
printf("\n\n Liste chainee: Pour la creation et l affichage d une
liste chainee :\n");
printf("----------------------------------------------------------
---\n");

printf(" Entrer le nombre d Elements : ");


scanf("%d", &n);
createElementList(n);
printf("\n Contenu entrer dans la liste : \n");
displayList();
return 0;
}
void createElementList(int n)
{
struct Element *fnElement, *tmp;
int num, i;
stElement = (struct Element *)malloc(sizeof(struct Element));

if(stElement == NULL) //Verifier si fnElement est NULL et si pas de memoire


disponible à allouer
{
printf(" La memoire ne peu pas etre allouer.");
}
else
{
// lire le contenu de l’Element entrer au clavier

printf(" Entrez le contenu de l Element 1 : ");


scanf("%d", &num);
stElement->num = num;
stElement->nextptr = NULL; // attache l’adresse au champ NULL
tmp = stElement;
// Creation de n Elements et les rajouter a la liste chainee
for(i=2; i<=n; i++)
{
fnElement = (struct Element *)malloc(sizeof(struct Element));
if(fnElement == NULL)
{
printf(" La memoire ne peut pas être allouée.");

}
else
{
printf(" Entrez le contenu de l Element %d : ", i);
scanf(" %d", &num);

fnElement->num = num; // attacher le champ num de fnElement


avec num
fnElement->nextptr = NULL; // attacher le champ de l’adress de
fnElement avec NULL

tmp->nextptr = fnElement; // attacher l’Element precedent c-a-d tmp


a fnElement
tmp = tmp->nextptr;
}
}
}
}
void displayList()
{
struct Element *tmp;
if(stElement == NULL)
{
printf(" Liste vide.");
}
else
{
tmp = stElement;
while(tmp != NULL)
{
printf(" Contenu = %d\n", tmp->num); // affiche le contenu de
l’Element en cours
tmp = tmp->nextptr; // avance vers le l’Element
suivant
}
}
}

Exercice 2: Affichage d’une liste chainée et de son inverse

Écrivez un programme en C pour créer une liste chainée de n éléments et affichez-les dans l'ordre
décroissant.
Données de test :
Entrez le nombre d’élément: 3
Données d'entrée pour l’élément 1: 5
Données d'entrée pour l’élément 2: 6
Données d'entrée pour l’élément 3: 7

Résultat attendu :
Contenu entrer dans la liste est :
Contenu = 5
Contenu = 6
Contenu = 7

La liste inverse est :


Contenu = 7
Contenu = 6
Contenu = 5

Solution : Notez que dans cette solution la fonction main() sera à la fin de programme, contraire
de l’exo 1. Donc ça ne change rien tant que tout est définit
#include <stdio.h>
#include <stdlib.h>

struct Element
{
int num; //Contenu de l’Element
struct Element *nextptr; //Addresse de l’Element
}*stElement;

void createElementList(int n); //fonction pour créer la liste


void reverseDispList(); //fonction pour inverse la liste
void displayList(); //fonction pour l’affichage de la liste

void createElementList(int n)
{
struct Element *fnElement, *tmp;
int num, i;
stElement = (struct Element *)malloc(sizeof(struct Element));
if(stElement == NULL) //Verifier si stElement est NULL et si y a pas de mémoire
à allouer
{
printf(" La memoire ne peut pas etre allouer-pas d’espace memoire
disponible.");
}
else
{
// Lire le contenu de l-Element entrer par clavier
printf(" Entrez le contenu de l-Element 1 : ");
scanf("%d", &num);
stElement-> num = num;
stElement-> nextptr = NULL; //Attacher le champ adresse à NULL
tmp = stElement;
//Creattion de n Elements puis les ajouter à la liste chainée
for(i=2; i<=n; i++)
{
fnElement = (struct Element *)malloc(sizeof(struct Element));
if(fnElement == NULL) //Verifier si fnElement est NULL et si y a pas
d’espace mémoire à allouer
{
printf(" La memoire ne peut pas être allouer – pas d’espace.");

}
else
{
printf(" Entrez le contenu de l-Element %d : ", i);
scanf(" %d", &num);
fnElement->num = num; // attacher le champ num de fnElement
avec num
fnElement->nextptr = NULL; // attacher le champ l’address de
fnElement avec NULL
tmp->nextptr = fnElement; // attacher le precedent Element c-a-d.
tmp a fnElement
tmp = tmp->nextptr;
}
}
}
}

void reverseDispList()
{
struct Element *prevElement, *curElement;

if(stElement != NULL)
{
prevElement = stElement;
curElement = stElement->nextptr;
stElement = stElement->nextptr;

prevElement->nextptr = NULL; //convertir le premier Element pour être le


dernier

while(stElement != NULL)
{
stElement = stElement->nextptr;
curElement->nextptr = prevElement;

prevElement = curElement;
curElement = stElement;
}
stElement = prevElement; //convertir le dernier Element pour être la tete
}
}

void displayList()
{
struct Element *tmp;
if(stElement == NULL)
{
printf(" Pas de donnees trouver dans la liste.");
}
else
{
tmp = stElement;
while(tmp != NULL)
{
printf(" Data = %d\n", tmp->num); // affiche le contenu de l-Element
en cours(courant)
tmp = tmp->nextptr; // avance la position de l-Element
en cours
}
}
}

int main()
{
int n;
printf("\n\n Liste chainee : Creation d’une liste chainee et
l’afficher en ordre inversé :\n");
printf("----------------------------------------------------------
--------------------\n");

printf(" Entrez le nombre d-Elements : ");


scanf("%d", &n);
createElementList(n);
printf("\n Le contenu entrer dans la liste est : \n");
displayList();
reverseDispList();
printf("\n La liste inverse est : \n");
displayList();
return 0;
}

Exercice 3 : Liste chainée et nombre d’élements


Écrivez un programme en C pour créer une liste chainée de n Eléments et compter le nombre
d’Eléments.
Resultat :
Contenu entré dans la liste est :
Contenu = 5
Contenu = 6
Contenu = 7

Le nombre total des eléments= 3

Solution:
#include <stdio.h>
#include <stdlib.h>

struct Element
{
int num; //Contenu de l-Element
struct Element *nextptr; //Addresse de l-Element
}*stElement;

void createElementList(int n); //fonction de creation de liste


int ElementCount(); //fonction pour le comptage des Elements
void displayList(); //fonction pour l’affichage de la liste

int main()
{
int n,totalElement;
printf("\n\n Liste Chainee : Creation d’une liste chainee
avec le comptage de ses Elements :\n");
printf("---------------------------------------------------
---------------------------\n");
printf(" Entrez le nombre d-Elements : ");
scanf("%d", &n);
createElementList(n);
printf("\n Le contenu entrer dans la liste est : \n");
displayList();
totalElement = ElementCount();
printf("\n le nombre total des Elements = %d\n", totalElement);
return 0;
}
void createElementList(int n)
{
struct Element *fnElement, *tmp;
int num, i;
stElement = (struct Element *)malloc(sizeof(struct Element));
if(stElement == NULL) //check whether the stElement is NULL and if so no memory
allocation
{
printf(" La Memoire ne peut pas être allouer – pas d’espace.");
}
else
{
// Lire le contenu de l-Element via le clavier
printf(" Entrez le contenu de l-Element 1 : ");
scanf("%d", &num);
stElement-> num = num;
stElement-> nextptr = NULL; //Attache le champ adresse à NULL
tmp = stElement;
//Creation de n Elements et les ajouter a la liste
for(i=2; i<=n; i++)
{
fnElement = (struct Element *)malloc(sizeof(struct Element));
if(fnElement == NULL) //Verifier si fnElement est NULL et si pas de
memoire à allouer
{
printf(" La memoire ne peut être allouer.");
break;
}
else
{
printf(" Entrez le contenu de l-Element %d : ", i);
scanf(" %d", &num);
fnElement->num = num; // Attache le champ num de fnElement
avec num
fnElement->nextptr = NULL; // attache le champ adresse de fnElement
avec NULL
tmp->nextptr = fnElement; // attache le precedent Element c-a-d.
tmp a fnElement
tmp = tmp->nextptr;
}
}
}
}

int ElementCount()
{
int ctr = 0;
struct Element *tmp;
tmp = stElement;
while(tmp != NULL)
{
ctr++;
tmp = tmp->nextptr;
}
return ctr;
}
void displayList()
{
struct Element *tmp;
if(stElement == NULL)
{
printf(" Pas de donnees dans la liste trouver.");
}
else
{
tmp = stElement;
while(tmp != NULL)
{
printf(" Data = %d\n", tmp->num); // affiche le contenu de l’Element
courant (en cours)
tmp = tmp->nextptr; // avance la position de l’Element
en cours
}
}
}

Affichage à la sortie :

Vous aimerez peut-être aussi