Titre de l'article : Les listes simples en C
Page n°1
Page précédente    Page suivante

Les listes simples en C

PLAN DE L'ARTICLE

[ 1. ] Différents types de listes

[ 1.1. ] L'interface et sa sémantique précise.

[ 1.2. ] Différentes implémentations de la même interface

[ 1.3. ] Séparation de la manipulation des données et de l'affichage des données

[ 2. ] Un exemple : une liste de notes

[ 2.1. ] Présentation de l'exemple

[ 2.2. ] Définir la structure de base

CONTENU DE L'ARTICLE

Lorsqu'on écrit un programme en C, on est amené la plupart du temps à manipuler des structures : par exemple, si vous écrivez un carnet d'adresses il faudra créer un structure contact comportant le nom, le prénom et l'adresse de la personne. Si vous voulez calculer la moyenne d'une liste de notes, on définira une structure Note composée d'un nom, d'un prénom et d'une valeur. Une fois qu'on a écrit ces structures de base, on est amené le plus souvent à manipuler des listes d'éléments de cette structure. Il existe de nombreuses façon de représenter une liste de TRUCs : un tableau statique de TRUCs, un tableau dynamique de TRUCs, une liste chaînée de TRUCs, un arbre de TRUCs...etc... Nous allons étudier ici l'implémentation la plus simple à comprendre : une liste représentée par un tableau statique.

[ 1. ] Différents types de listes

[ 1.1. ] L'interface et sa sémantique précise.

Lorsqu'on veut définir une liste de TRUCs, il faut se poser une première question : quelles sont les fonctions dont on aura besoin pour manipuler notre liste. En général, on aura besoin d'ajouter un TRUC, d'afficher notre liste de TRUCs, de supprimer un TRUC, de rechercher la liste des TRUCs vérifiant une propriété donnée...etc... Il y aura aussi des contraintes du style : il faut interdire d'avoir 2 TRUCS avec le même nom et le même prénom par exemple, ou avec le même numéro de sécu par exemple. Il faut donc clairement définir ces contraintes. Parfois, il peut être nécessaire de trier automatiquement notre liste de TRUCs par rapport à un critère : on peut ainsi les afficher de manière plus lisible mais surtout , grâce au tri, on peut rechercher plus vite un élément (on peut utiliser une recherche dichotomique pour rechercher un TRUC). Il faut donc réfléchir à l'ensemble des fonctions qui nous seront nécessaires et à l'ensemble des contraintes qui pèseront sur notre liste !

[ 1.2. ] Différentes implémentations de la même interface

Une fois que l'ensemble des fonctions nécessaires a été complètement défini, il faut passer à la phase technique. Comment représenter notre liste ? Répondre à cette question sera le premier choix technique. Il ne faut pas penser qu'il n'y a qu'une seule solution : il existe de très nombreuses structures de données permettant de représenter notre liste. Quelle est la meilleure ? Aucune n'est parfaite et chacune présente des avantages et des inconvénients. Il faudra donc faire le choix le plus adapté à notre problème !

[ 1.3. ] Séparation de la manipulation des données et de l'affichage des données

Personnellement, je recommande très fortement de séparer au maximum les fonctions effectuant des entrées/sorties (des affichages à l'écran et des saisies au clavier) des fonctions manipulant les données (ajouter ou supprimer un élément dans la liste par exemple). Ainsi, la méthodologie présentées dans ce document peut être réutilisée sans la moindre difficulté dans le cadre d'application ayant une interface graphique comportant des fenêtres.

[ 2. ] Un exemple : une liste de notes

[ 2.1. ] Présentation de l'exemple

Prenons un exemple concret, on veut gérer une liste de notes définies par un nom, un prénom et une valeur. On veut interdire d'avoir 2 notes correspondant au même nom et au même prénom. On veut pouvoir ajouter une note, afficher la liste des notes, supprimer une note (en donnant le nom et le prénom), calculer la moyenne des notes, afficher la liste des notes supérieures ou égales à 10 et la liste des notes inférieures strictement à 10.

[ 2.2. ] Définir la structure de base

On veut manipuler dans notre exemple une liste de note : une note sera définie par 2 chaînes de 10 caractères utiles : le nom et le prénom et par un double qui représentera la valeur de la note.
Sur une note, on pourra saisir au clavier les 3 caractéristiques d'une note et afficher à l'écran notre note.

On écrira alors le fichier Note.h.

#ifndef NOTE_H
#define NOTE_H
struct Note
{
char nom[11];
char prenom[11];
double valeur;
};
void saisir(Note &);
void afficher(Note);
#endif

On écrira ensuite le fichier Note.cpp.

#include"Note.h"
#include<stdio.h>
void saisir(Note &n)
{
printf("Tapez le nom : ");scanf("%s",n.nom);
printf("Tapez le prénom : ");scanf("%s",n.prenom);
printf("Tapez la valeur : ");scanf("%lf",&n.valeur);
}
void afficher(Note n)
{
printf("NOM=%s PRENOM=%s VALEUR=%lf \n",n.nom,n.prenom,n.valeur);
}



Look:Std

Valid XHTML 1.0!