• Aucun résultat trouvé

TP 2 : LES LISTES. IN4R11 2020-2021

N/A
N/A
Protected

Academic year: 2022

Partager "TP 2 : LES LISTES. IN4R11 2020-2021"

Copied!
4
0
0

Texte intégral

(1)

1

IN4R11 2020-2021 TP 2 : LES LISTES.

LIRE et TOUT LIRE

Avertissement :

- Le type abstrait (vu en cours) doit être utilisé dans ce TP.

Consignes :

- Pour implémenter le type abstrait reprendre le code (.c) vu en cours des opérations : cliquez ici

(2)

2 Type liste

Utilise typeElem, booleen,int, etc..

Opérations

listevide :

liste

est_vide : liste

booleen

cons : liste x element

liste

suite : liste

liste

tête : liste

typeElem

axiomes

tete(cons(e,l)) = e suite(cons(e,l)) = l

avec : liste l, element e préconditions

tête(l) et suite(l) sont définies

ssi est_vide(l) est faux

On utilisera le type liste suivant pour la représentation chaînée.

typedef struct ll { typeElem e;

struct ll *suiv;

} typeListe ;

typedef typeListe *liste ; /* liste est un pointeur !*/

liste est un pointeur ??: pour éviter la présence d’opérateurs tels que : ‘

’, ‘*’ et ‘&’ qui rendent illisible.

#define liste_vide NULL /* pour déclarer liste vide */

Le type typeElem de la structure peut être n’importe quel type. Dans notre TP on choisira le type entier pour typeElem :

#define typeElem int /* à déclarer avant la structure */

#define booleen int /* on définit le type booléen */

On réutilisera, autant que possible, les opérations du type abstrait pour la suite du TP.

(3)

3

Partie 1. Opérations simples.

Ecrire les fonctions | procédures suivantes:

1- int longueur(liste L)qui retourne la longueur de la liste ( c-a-d le nombre d’éléments), 2- void afficher(liste L). affiche à l’écran les éléments de L

3- booleen isLast(liste L) qui teste si on est sur le dernier élément de L.

4- typeElem Last (liste L) qui retourne le dernier élément de la liste L.

5- typeElem maxL( liste L) qui retourne l’élément maximal d’une liste non vide (en itératif),

6- typeElem rec_maxL( liste L) qui retourne l’élément maximal d’une liste non vide (en récursif),

7- booleen recherche(typeElem X ,liste L) :

retourne VRAI si X est dans la liste L ; FAUX sinon

Partie 2.

Ecrire les fonctions | procédures suivantes :

8- int nb_Occu(typeElem X ,liste L) qui retourne le nombre d’occurrence d’un élément donné dans une liste.( nombre de fois o% X apparait dans la liste L)

9- typeElem kieme(liste L, int k): retourne le kième élément de la liste sinon -1

10- int ieme(liste L, typeElem E) :

retourne la position de l’ élément E

sinon -1 (cas de liste vide, ou i > taille de liste..)

Partie 3

Ecrire les procédures suivantes : (attention !!!: liste *L)

(4)

4 11. Écrire un algorithme qui inverse une liste chaînée sans recopier ses éléments. Réaliser une version itérative : void iter_inverse(list *);

et une autre récursive. list * rec_inverse(list* pl)

**** traiter les différents cas de listes vides et|non vides, k >

taille de la liste ..

12 -Ajouter un élément en position k :

void ajoutAukieme(liste *L, int k, typeElem e);

13- Suppression d'un élément en début de liste : void supprime_debut(liste *L);

14- Ajouter un élément en fin de liste :

void ajout_fin(liste *L, typeElem X);

15- Supprimer un élément en position k :

void supprimekieme(liste *L, int k);

Partie 4. Ecrire les procédures suivantes : 16- Concaténer deux listes :

void catenate(liste *L1, liste *L2) concatène L2 à L1 :

***** traiter les différents cas listes vide et|non vides etc..

- ne pas oublier le cas L1 = L2 (c’est-à-dire même liste ) concat(L,L), dans ce cas que faut-il choisir copies (2 fois la liste L ) ou références (liste circulaire)?

On optera pour la liste circulaire.

17- void couper(liste *L1, liste *L2, liste *L3)Obtenir deux listes L1, L2 à partir d’une liste L3 en préservant les éléments de cette dernière.(les nombres positifs dans L1 , les négatifs dans L2, les nuls seront ignorés.

18 - void fusion(liste *L1, liste *L2, liste *L3) Obtenir une 3ème liste L3 triée à partir de deux L1 et L2 triées. (par ordre croissant).

Références

Documents relatifs

Fiche réalisée par le SCUIO / Service Commun Universitaire d’Information et d’Orientation et DPEIP • Septembre 2021 Cursus généraliste en économie, offrant une ouverture

Dans l’ensemble, les résultats ci-dessus sont confirmés, dans le sens où l’anglais est le plus souvent la langue vers laquelle l’apprenant change de code, alors que

On peut ainsi affirmer que, pour ce qui est de l’utilisation de la méthodologie de travail de la linguistique de corpus, la didactique des L1 n’a pas bénéficié du

• Définir le prédicat partage(L,X,L1,L2), qui étant donnés une liste de nombre L et un nombre X, calcule la liste L1 des nombres de L inférieurs à X, et la liste L2 des nombres de

Ecrire une fonction moyenne qui calcule la moyenne d’une liste de flottants et la tester sur vos deux listes L3 et L4 puis sur L1 et L2. Vous n’avez pas le droit d’utiliser de

Dans les matières AVEC TD, si la moyenne obtenue entre le CT (examen écrit) et le CC (note obtenue en TD) est inférieure à 10/20, le CC ne peut être repassé mais le CT doit

L'individu vit au sein d'une société : l'occasion de décrire la variété des sociétés et donc la relativité de toutes les “vérités”, l'influence de la langue sur la

f) La fusion de deux listes triées d’entiers L1 et L2 en une liste triée L3 (avec ensuite sans création d’une nouvelle liste);.. EXERCICE