Vous êtes sur la page 1sur 3

INSTITUT SUPERIEUR DU GENIE ELECTRIQUE

Année académique 2022 / 2023


………………………………
2AMIFI – 2ARIT décembre 2023
…………………..
Semestre 3
……………..
P
Enseignant : Gouayon KOALA a
……………………………… r
c
P o
a TP - STRUCTURES DE DONNEES DYNAMIQUES
r
c
o Indications :
1- Ouvrir un éditeur,
2- Saisir le code
3- Enregistrer le fichier sous tp1.c
4- Ouvrir le terminal
5- Compiler avec la commande gcc dans le terminal

Exercice 1
1- Déclarer une structure de liste chaînée d’entiers.

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

typedef int TypeDonnee;

/* Liste d'entiers */
typedef struct Cell
{
TypeDonnee donnee;
struct Cell *suivant;
}TypeCellule;

2- Écrire une fonction d’insertion en Tête de liste

TypeCellule *InsereEnTete(TypeCellule *L, TypeDonnee d){


TypeCellule *q;
q = (TypeCellule*)malloc(sizeof(TypeCellule));
q->donnee = d;
q->suivant = L;
return q;
}

3- Écrire une fonction qui permet de parcourir une liste et d’afficher les éléments (entier) de la
liste

void AffichageListe(TypeCellule *L){


TypeCellule *q = L;
if (q==NULL)
printf("La liste ne contient aucun element");

while(q!= NULL){
printf("%d\n", q->donnee);
q = q->suivant;
}
}
4- Écrire une fonction qui permet de saisir une donnée, la fonction renverra un TypeDonnee

TypeDonnee SaisieDonnee(){
TypeDonnee d;
printf("Entrer la donnée : ");
scanf("%d", &d);
return d;
}

5- Écrire une fonction d’insertion en Queue de Liste

TypeCellule *InsereEnQueue(TypeCellule *L, TypeDonnee d){


TypeCellule *q, *ptrAux = L;

q = (TypeCellule *)malloc(sizeof(TypeCellule));
q->donnee = d;
q->suivant = NULL;
if (L == NULL)
return q;
else
{
for(ptrAux=L; ptrAux->suivant !=NULL ;ptrAux=ptrAux->suivant)
{}
ptrAux->suivant = q;

}
return L;
}

6- Écrire une fonction qui permet de Créer une liste, la fonction permettra d’insérer autant que
l’on souhaite des éléments dans la liste.

TypeCellule *CreerListe(){

TypeCellule *L=NULL;
char choix ='o';
TypeDonnee data;

while(choix =='o'){
data = SaisieDonnee();
L = InsereEnTete(L, data);
printf("Voulez-vous Inserer un élement dans la liste ? o ou n
?");
scanf("%c", &choix);

}
return L;
}

Exercice 2 (recherche d’un élément)


Écrire une fonction qui prend en paramètre une liste chaînée d’entiers et un nombre entier n, et qui renvoie
l’adresse de la première cellule dont la donnée vaut n. La fonction renverra NULL si l’élément n n’est pas
présent dans la liste.

TypeCellule *RechercheElt(TypeCellule* L, TypeDonnee n)


{
TypeCellule *p=L; //pointeur auxiliaire

while (p!=NULL && p->donnee!=n)


p=p->suivant;
if (p==NULL)
return NULL;
return p;
}

Exercice 3 (suppression dans une liste chaînée)


1- Écrire une fonction qui prend en paramètre une liste chaînée et une donnée, et qui supprime la
première occurrence de cette donnée dans la liste.
2- Écrire une fonction qui supprime toutes les occurrences d’une donnée (passée en paramètre) dans une
liste chaînée. Quelle est la complexité de l’algorithme ?

/***** EX3-1 TP Fonction de suppression d'une occurence **/


TypeCellule *supprime1occu(TypeCellule* L, TypeDonnee occur)
{
TypeCellule *preced, *suiv, *courant=L; //pointeur auxiliaire
if(courant->donnee == occur){
preced = courant->suivant;
free(courant);
return preced;
}
else {
while(courant->donnee !=occur && courant->suivant !=NULL){
preced = courant;
courant = courant->suivant;
}
if (courant->donnee == occur)
{
suiv = courant->suivant;
free(courant);
preced->suivant = suiv;
}
return L;
}
}

Vous aimerez peut-être aussi