Vous êtes sur la page 1sur 3

EHTP Programmation en C GC

TD7

Exercice 1 :

Écrire une fonction qui calcule la somme des éléments d’une liste chaînée d’entiers.

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.

Exercice 3 :

a) Écrire une fonction qui prend en paramètre un tableau et son nombre d’éléments, et qui crée une
liste chaînée dont les éléments sont les mêmes que les éléments du tableau.

b) Écrire une fonction qui prend en paramètre une liste chaînée, et qui crée un tableau dont les
éléments sont les mêmes que les éléments du tableau.

Exercice 4 :

Écrire une fonction qui prend en paramètre une liste chaînée et renvoie une autre liste ayant les mêmes
éléments, mais dans l’ordre inverse.

Exercice 5 :

Écrire une fonction de recopie d’une liste chaînée.

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

a) É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.

b) É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 ?

c) Même question qu’au b) mais pour un tableau au lieu d’une liste chaînée.

Exercice 7 :

Écrire une fonction de concaténation de deux listes chaînées. La fonction prend en entrée deux listes et
ressort une seule liste réunion l’une à la suite de l’autre des deux listes. On donnera deux versions de
cette fonction, l’une destructrice (c’est- à-dire qu’on ne conservera pas les listes chaînées d’entrée),
l’autre non destructrice (c’est-à-dire que l’on préservera les listes chaînées d’entrée).

Exercice 8 (tri d’une liste chaînée) :


a) Écrire une fonction qui prend en paramètre une liste chaînée d’entiers et vérifie

qu’elle est triée dans l’ordre croissant.

1
EHTP Programmation en C GC

b) Écrire une fonction qui insère un élément dans une liste chaînée triée. La liste re- tournée doit être
triée. Pour cela, on recherchera l’adresse de la cellule (si elle existe) juste avant l’emplacement de
l’insertion.

c) Même question qu’au b) mais avec un tableau au lieu d’une liste chaînée.

d) Donner un algorithme quadratique de tri d’une liste chaînée (on calculera le nombre d’opérations).

Exercice 9 :

Écrire une fonction qui prend en entrée deux listes chaînées de même lon- gueur, et qui crée une liste
chaînée fusion alternée des deux listes. La liste fusion doit être la réunion des deux listes, mais les
éléments de la liste fusion doivent être alter- nativement de l’une et de l’autre des deux listes. Si les
listes ne sont pas de même longueur, la liste fusion se terminera comme la plus longue des deux listes
en entrée. On fera une version destructrice et une version non destructrice de la fonction.

Exercice 10 (interclassement et tri par interclassement) :

a) Écrire une fonction Interclassement qui prend en paramètre deux listes chaî- nées supposées triées,
et qui retourne une liste qui est la réunion des deux listes triées. La liste retournée doit être triée.
Quelle est la complexité de l’interclassement ?

b) Écrire une fonction de tri de liste chaînée TriInterclassement qui fonctionne comme suit ;

• Si la liste est vide ou n’a qu’un seul élément, la fonction renvoie la liste elle même. • Sinon, la
fonction partage la liste en deux sous-listes L1 et L2 d’égales longueurs

(plus ou moins 1) et
1. trie les listes L1 et L2 par un appel récursif à la fonction

TriInterclassement ;
2. effectue l’interclassement de L1 et L2 et retourne le résultat.

Quelle est la complexité de ce tri ?

c) Même question qu’au a) mais avec des tableaux au lieu de listes chaînées. La fonction retournera un
tableau.

d) Même question qu’au b) mais avec des tableaux au lieu des listes chaînées.

Exercice 11 :

Écrire une fonction qui prend en entrée une liste chaînée d’entiers et qui ressort deux listes chaînées,
l’une avec les nombres pairs, l’autre avec les nombres impairs de la liste d’entrée. On détruira la liste
d’entrée.

Exercice 12 (Listes doublement chaînées) :

On s’intéresse à des listes doublement chaînées, pour lesquelles chaque cellule à un pointeur suiv vers
la cellule suivante, et un pointeur preced vers la cellule précédente. Voici une exemple ci-dessous :

2
EHTP Programmation en C GC

a) Déclarer le type de données correspondant à une liste doublement chaînée d’eniers.

b) Écrire une fonction d’insertion en tête de liste dans une liste doublement chaînée.

c) Écrire une fonction d’insertion en queue de liste dans une liste doublement chaînée.

d) Écrire une fonction d’insertion dans une liste triée doublement chaînée. La liste doit rester triée.

e) Écrire une fonction qui supprimme la première occurence (si elle existe) d’un en- tier n dans une
liste doublement chaînée.

f) Écrire une fonction qui supprimme la dernière occurence (si elle existe) d’un entier n dans une liste
doublement chaînée.

g) Écrire une fonction qui supprimme l’avant-dernière occurence (si elle existe) d’un entier n dans une
liste doublement chaînée.

h) Écrire une fonction qui supprime toutes les occurences d’un nombre n dans une liste doublement
chaînée.

i) Écrire une fonction non conservative qui réalise la concaténation de deux listes doublement
chaînées.

j) Écrire une fonction de recopie d’une liste doublement chaînée à l’identique.

Vous aimerez peut-être aussi