Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
int a,b,s;
int main()
2. Déclarations de variables
Les types de base du C++ sont les mêmes que les types du C, avec les extensions suivantes:
• Le type bool
• La notion de référence
• Le type class (fondamental, car c'est lui qui permet de définir les objets)
Ce type peut être utilisé avec des qualificatifs pour indiquer sa taille (long ou short), et le
fait qu'il soit signé (signed) ou non (unsigned).
Pour les entiers et les caractères, le qualificateur signed est appliqué par défaut.
Un booléen peut prendre les valeurs true ou false. Il est possible de convertir un booléen en
entier et vice-versa; dans ce cas, true se convertit en 1, false se convertit en 0. Dans l'autre
sens, 0 est converti en false et tout entier non nul est converti en true.
• Le type char
• Le type string
C'est une chaine de caractère qui est considéré comme un tableau de caractères
4. Les opérateurs
Opérateurs signification Opérateurs signification Opérateurs signification
5. L'écriture
6. La lecture
Lecture d'une variable cin>>nomvariable: cin>>a;
Nb: Quand on lit une variable il faut appuyer sur la touche entrée pour valider la saisie.
Syntaxe :
if (condition) instruction
Exemple :
#include <iostream>
Using namespace std;
int main()
{
int a;
cout << "Tapez la valeur de a : "; cin >> a;
if (a > 10)
cout << "a est plus grand que 10" << endl;
cout << "Le programme est fini" << endl;
return 0;
}
Le if...else
Cette structure de contrôle permet d'exécuter une instruction si une condition est vraire, ou une autre
instruction si elle est fausse.
if (condition)
instruction1 ;
else
instruction2 ;
Exemple
#include <iostream>
using namespace std;
int main()
int a;
cout << "Tapez la valeur de a : "; cin >> a;
if (a > 10)
cout << "a est plus grand que 10" << endl;
else
cout << "a est inférieur ou égal à 10" << endl;
return 0;
}
2. Le switch
L'instruction switch permet de tester plusieurs valeurs pour une expression. C'est une forme
réorganisée de if
Syntaxe
switch(expression)
{
case constante1:
instruction1_1; break;
case constante2:
instruction2_1; break;
...
default:
instruction;
}
Exemple 1
#include <iostream>
using namespace std;
int main()
{
int a;
cout << "Tapez la valeur de a : "; cin >> a;
switch(a)
{
case 1 :
cout << "a vaut 1" << endl;
break;
case 2 :
cout << "a vaut 2" << endl;
break;
case 3 :
cout << "a vaut 3" << endl;
break;
default :
cout << "a ne vaut ni 1, ni 2, ni 3" << endl;
break;
}
return 0;}
Ce programme demande à l'utilisateur de taper une valeur entière et la stocke dans la variable a. On
teste ensuite la valeur de a : en fonction de cette valeur on affiche respectivement les messages "a
vaut 1", "a vaut 2", "a vaut 3", ou "a ne vaut ni 1, ni 2, ni 3".
Ce programme demande à l'utilisateur de taper une valeur entière et la stocke dans la variable a. On
teste ensuite la valeur de a : en fonction de cette valeur on affiche respectivement les messages "a
vaut 1", "a vaut 2 ou 4", "a vaut 3, 7 ou 8", ou "valeur autre".
3. Le for
Le for est une structure de contrôle qui permet de répéter un certain nombre de fois une partie d'un
programme.
Syntaxe
Exemples
#include <iostream>
using namespace std;
int main()
{ int i;
for(i=0 ; i<10 ; i++)
cout << i*i << endl;
return 0;
}
Initialisation ;
while (condition)
{
instruction;
incrementation ;
}
Exemple de programme
#include <iostream>
using namespace std;
int main()
{
int i = 0;
while (i < 10)
{
cout << "La valeur de i est : " << i << endl;
i++;
}
cout << "La valeur finale de i est : " << i << endl;
return 0;
}
5. Le do ... while
Syntaxe
Initialisation ;,
do {
...instructions ;
Incrémentation ;
} while( condition );
Exemple
#include <iostream>
using namesapce std;
int main()
{ int i = 0;
do
{ cout << "La valeur de i vaut : " << i << endl; i = i + 1;
}
while (i < 10);
cout << "La valeur finale de i est " << i << endl; return 0;}
Exo 2
1. Écrire un programme ; qui dit si une année donnée est une année bissextile.
Une année est bissextile si elle est divisible par 4
2. Écrire un programme qui demande un numéro de mois à l’utilisateur et
indique en retour son nom et le nombre de jours dans ce mois.
Exo 3 :
Écrire un programme qui lit le nombre d'années le nombre de moi et des jours pour
tout en jour. Exemple: 9 ans 8 mois et 20 jours=3500jours
Exo 4 :
Écrire un programme qui lit un entier n et affiche entiers inférieurs ou égaux a n, leurs
carrés et leurs cubes. Il affiche à la fin la somme de ces entiers ; la somme des carrés
et la somme des cubes.
n n² n3
0 0 0
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
15 55 225
1. Écrire un programme qui va afficher à l’écran les entiers compris entre 5 et 35.
2. Écrire un programme qui va afficher les multiples de 3 compris entre deux bornes
données
3. Écrire un programme qui va afficher les multiples de 4 compris entre deux bornes
données
4. Écrire un programme qui calcule le maximum entre quatre entier a, b, c et d.
Exo 6:
1. Écrire un programme, qui affiche les multiple d'un entier donné inférieurs à 100;
2. Écrire un programme qui affiche les diviseurs d'un entier n donnée
Exo 7:
s=1 +…+
4. Écrire un programme ; qui lit une série de réels, calcule puis affiche leur
somme S ; leur produit P et leur Moyenne M. le programme va s'arrêter
lorsque l'utilisateur entre 0 (zéro)
5. Écrire un programme qui demande à l’utilisateur de saisir 2 entiers A et B qu'il
affiche à l'écran. Le programme ne s'arrêtera que lorsque les deux entiers
seront tous impairs
Exo 8:
1. Saisir k réels
2. Calculer et afficher leur somme
3. Calculer et afficher leur moyenne
4. Afficher leur minimum
5. Afficher leur Maximum
Moy = (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12)/12
C’est pourquoi l'algorithme nous permet de rassembler toutes ces variables en une
seule, au sein de laquelle chaque valeur sera désignée par un numéro.
2. Définition
3. Déclaration
Comme les variables d’un tableau doivent être de même type, il convient de
préciser ce type au moment de la déclaration du tableau. De même, on précise lors
de la déclaration du tableau le nombre de valeurs qu’il contient.
La syntaxe est :
#include<iostream>
#include<cstdlib>
using namespace std;
int i,n,a;
int main()
{
cout<<" donnez la taille du tableau:";
cin>>n;
int T[n];
for(i=0;i< n;i++)
{
cout<<"Donnez la valeur "<<i+1<<" du tableau:";
cin>> T[i]=a;
}
for(i=0;i< n;i++)
cout<<T[i]<<"\t";
cout<<endl;
system("pause");
return 0;
}
45 122 12 3 21 78 64 53 89 28 84 46
On commence par rechercher, parmi les 12 valeurs, quel est le plus petit élément, et
où il se trouve. On l’identifie en quatrième position (c’est le nombre 3), et on l’échange
alors avec le premier élément (le nombre 45). Le tableau devient ainsi :
3 122 12 45 21 78 64 53 89 28 84 46
On recommence à chercher le plus petit élément, mais cette fois, seulement à partir
du deuxième (puisque le premier est maintenant correct, on n’y touche plus). On le trouve
3 12 122 45 21 78 64 53 89 28 84 46
3 12 21 45 122 78 64 53 89 28 84 46
2. Tri à bulles
L’idée de départ du tri à bulles consiste à se dire qu’un tableau trié en ordre croissant,
c’est un tableau dans lequel tout élément est plus petit que celui qui le suit.
En effet, prenons chaque élément d’un tableau, et comparons-le avec l’élément qui le suit.
Si l’ordre n’est pas bon, on permute ces deux éléments. Et on recommence jusqu’à ce que l’on
n’ait plus aucune permutation à effectuer. Les éléments les plus grands « remontent » ainsi
peu à peu vers les premières places, ce qui explique la charmante dénomination de « tri à
bulle ».
void tribulle(int t[])
{ int aux;
for(i=0; i<nb-1; i++)
for(j=i+1; j<nb; j++)
if (t[i]>t[j])
{ aux=t[j];
t[j]=t[i];
t[i]=aux;
}}
}
i++;
}
for(i=0;i<n;i++)
cout<<t[i]<<"\t";
cout<<endl;
system("pause");
return 0;
}
4. LA RECHERCHE DICHOTOMIQUE
On coupe le tableau en deux parties et on cherche dans une partie des partie qui sera
elle aussi divisée en deux sous parties jusqu''à la l'obtention ou pas de la valeur
recherchée.
Programme complet
#include <iostream>
#include <string>
using namespace std;
bool trouver=false;
int nb,T[100],n,i;
EXERCICE 1
4. Le programme doit ensuite afficher soit "le tableau est croissant", soit "le tableau est
décroissant", soit "le tableau est constant", soit "le tableau est quelconque".
EXERCICE 4
Écrire un programme qui demande à l'utilisateur de saisir n entiers stockés dans un tableau.
Le programme doit permettre de:
EXERCICE 3
Écrire un programme qui demande à l'utilisateur de saisir n nom stockés dans un tableau.
Le programme doit permettre de:
1. saisir et afficher les n Noms;
2. Chercher et afficher le plus petit nom
3. Chercher et afficher le grand petit nom
4. Trier le tableau par ordre croissant et réafficher le tableau.
I. Les fonctions
Le rôle d'une fonction en programmation est similaire à celui d'une fonction en
mathématique : elle retourne un résultat à partir des valeurs des paramètres
type nomfonction(parametres)
{
#include<iostream>
#include<cstdlib>
using namespace std;
int x,y,z;
bool b;
int factorielle(int n)
{
int f=1,i;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
int main()
{
int c;
do
{
cout<<"\n1: sommecarre\n";
cout<<"2: paire\n";
cout<<"3: minimum\n";
cout<<"4: factorielle\n";
cout<<"5: puissance\n";
cout<<"6: quitter\n";
cout<<"faite votre choix:";
cin>>c;
while(c<1||c>6)
{
cout<<"faite votre choix:";
cin>>c;
}
switch(c)
Réalisé par MATY Maman Page 17
Support de cours de programmation en C++
{
case 1:
cout<<"donner deux entiers:";
cin>>x>>y;
z=sommecarre(x,y);
cout<<"z = "<<z;break;
case 2:
cout<<"donner un entier:";
cin>>x;
b=paire(x);
if(b)
cout<<x<<" est pair ";
else
cout<<x<<" est impair ";
cout<<endl;break;
case 3:
cout<<"donner deux entiers:";
cin>>x>>y;
z=minimum(x,y);
cout<<"le minimum = "<<z;break;
case 4:
cout<<"donner un entier:";
cin>>x;
z=factorielle(x);
cout<<"la factorielle de"<<"x"<<" = "<<z;
cout<<endl;
break;
case 5:
cout<<"donner deux entiers:";
cin>>x>>y;
z=puissance(x,y);
cout<<x<<"^"<<y<<" = "<<z<<endl;
break;
case 6:
cout<<"bye bye"<<endl;
break;
}
}
while(c!=6);
return 0;
}
Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure
void nomprocedure(parametres)
{
corps de la procedure ;
}
L'appel d'une procédure, se fait dans le programme principal ou dans une autre
procédure par une instruction indiquant le nom de la procédure :
void nomprocedure()
{
corps de la procedure ;
}
Les paramètres placés dans l'appel d'une procédure sont appelés paramètres
effectifs. Ils contiennent les valeurs pour effectuer le traitement
EXERCICE 1
Écrire une fonction distance ayant comme paramètres 4 doubles xa,ya et xb,yb qui représentent les
coordonnées de deux points A et B et qui renvoie la distance AB.
EXERCICE 2
Écrire une fonction f ayant comme paramètres un double x et un booléen ok et qui renvoie un double
par un return. La fonction renvoie par un return la racine carrée de (x-1)*(2-x). La fonction renvoie par
l'intermédiaire de la variable ok la valeur true si la fonction est définie au point x, false sinon.
EXERCICE 3
Écrire une fonction f ayant en paramètre un entier et qui renvoie par un return un booléen : true si
l'entier est premier et false sinon.
EXERCICE 4
Écrire une fonction f ayant comme paramètre un entier n et qui renvoie le n-ième nombre premier :
cette fonction utilisera la fonction du 3).
EXERCICE 5
Écrire une fonction swap ayant en paramètres 2 entiers a et b et qui échange les contenus de a et de
b. .
EXERCICE 6
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la
taille du tableau. f doit renvoyer par un return un booléen b indiquant s'il existe une valeur comprise
entre 0 et 10 dans les n premières cases du tableau t
EXERCICE 7
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la
taille du tableau. f doit renvoyer par un return le nombre de valeurs comprises entre 0 et 10 dans les n
premières cases du tableau t.
EXERCICE 8
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la
taille du tableau. f possède un autre paramètre v , entier passé par référence. f doit renvoyer par un
return un booleén b indiquant s'il existe une valeur comprise entre 0 et 10 dans les n premières cases
du tableau t. Si f renvoie true, v est égal à la valeur de la première case du tableau comprise entre 0 et
10.
EXERCICE 9
Écrire une fonction f ayant en paramètres un tableau t1 de taille quelconque et un entier n indiquant la
taille du tableau, ainsi qu'un tableau t2 de la même taille que t1. f doit renvoyer par un return un entier
nb indiquant le nombre de valeurs comprises entre 0 et 10 dans le tableau t1. f doit mettre dans le
tableau t2 les différentes valeurs comprise entre 0 et 10 qu'il a rencontrées dans le tableau t1.
EXERCICE 10
Écrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la
taille du tableau. f doit renvoyer par un return un entier égal à l'indice de la première case du tableau
(parmi les n premières) comprise entre 0 et 10. S'il n'existe pas de telle valeur, la fonction renvoie -1.
Tout module récursif doit posséder un cas limite (cas trivial) qui arrête la
récursivité
#include <iostream>
#include<cstdio>
using namespace std;
int f;
int facto(int n)
{
if( n==1)
return 1;
else
return n*facto(n-1);
}
int main()
{ int n;
cout<<"Donnez un entier:";
cin >>n;
f=facto(n);
cout<<"La factorielle de " <<n <<" = " <<f<<endl;;
system("pause");
return 0;
}
Exemple
Écrivez une fonction récursive (puis itérative) qui calcule le terme n de la suite
définie par : U(0)=2; U(1)=3 et U(n)=4U(n-1)+2U(n-2)
#include<iostream>
#include<cstdlib>
using namespace std;
int n,s;
int suite(int n)
{
if(n==0)
return 2;
else
if(n==1)
return 3;
else
return 4*suite(n-1) + 2*suite(n-2);
}
Réalisé par MATY Maman Page 21
Support de cours de programmation en C++
int main()
{
cout<<"Donner un entier:";
cin>>n;
s=suite(n);
cout<<"U("<<n<<") = "<<s<<endl;
system("pause");
return 0;
}
Une procédure récursive qui permet d'afficher la valeur binaire d'un entier n
#include<iostream>
#include<cstdlib>
using namespace std;
int n;
void binaire(int n)
{
if(n!=0)
{
binaire(n/2);
cout<<n%2;
}
}
int main()
{
cout<<"Donner un entier:";
cin>>n;
cout<<n<<" = ";binaire(n);
cout<<endl;
system("pause");
return 0;
}
La notion de structure permet de manipuler sous forme d'une entité unique un objet composé
d'éléments, appelés membres ou champs, de types pouvant être différents. Elle est très proche
de la notion de classe en programmation orientée objet.
struct personne {
char nom[20];
char prenom[20];
int no_ss;
}
struct Client
{
int Age;
float Taille;
} maty;
struct
{
int Age;
float Taille;
} maman;
L'accès aux champs d'une structure se fait avec l’opérateur.. Par exemple, si l'on reprend la
structure complexe z, on désignera le champ re par z.re. Les champs ainsi désignés peuvent
être utilisés comme toute autre variable.
struct Client
{
int Age;
string nom,prenom
folat Taille;
};
4. Exemples
a) Structure employé
include<iostream>
#include<cstdlib>
using namespace std;
struct employer
{
string nom;
string prenom;
float salaire;
};
void saisie()
{
cout<<" donnez le nombre d'employers: ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<" donnez le nom "<<i<<":";
cin>>e.nom;
cout<<" donnez le prenom "<<i<<":";
cin>>e.prenom;
cout<<"donnez le salaire de "<<i<<":";
cin>>e.salaire;
T[i]=e;
}
}
Réalisé par MATY Maman Page 24
Support de cours de programmation en C++
void afficher()
{
for(int i=0;i<n;i++)
cout<<T[i].nom<<"\t"<<T[i].prenom<<"\t"<<T[i].salaire<<endl;
}
void trier()
{
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(T[i].salaire<T[j].salaire)
{ e=T[i];
T[i]=T[j];
T[j]=e;
}
}
int main()
{
saisie();
afficher();
rechercher(T);
trier();
cout<<"\n----tableau trier----\n";
afficher();
system(" pause ");
return 0;
}
#include<iostream>
#include<cstdlib>
#include<myconio.h>
using namespace std;
struct etudiant
{
string nom,prenom,mention;
float moyenne,age;
int rang;
};
typedef struct etudiant etud;
etud e,T[20];int n,i,j,k;
void saisie()
{
cout<<" donnez le nombre d'etudiant: ";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"donnez le nom:";
cin>>e.nom;
cout<<" donnez le prenom:";
cin>>e.prenom;
cout<<" donnez son age:";
cin>>e.age;
cout<<" donnez sa moyenne:";
cin>>e.moyenne;
T[i]=e;
}
}
void afficher(int k)
{
gotoxy(1,1);
cout<<" nom ";
gotoxy(15,1);
cout<<" prenom ";
gotoxy(25,1);
cout<<" age ";
gotoxy(35,1);
cout<<" moyenne ";
gotoxy(45,1);
cout<<" mention ";
gotoxy(60,1);
cout<<" rang ";
for(i=0;i<n;i++)
{
gotoxy(1,k);cout<<T[i].nom;
gotoxy(15,k);cout<<T[i].prenom;
gotoxy(25,k);cout<<T[i].age;
gotoxy(35,k);cout<<T[i].moyenne;
gotoxy(45,k);cout<<T[i].mention;
gotoxy(60,k);cout<<T[i].rang;
k=k+2;
}
cout<<endl;
}
void mention()
Réalisé par MATY Maman Page 26
Support de cours de programmation en C++
{
for(i=0;i<n;i++)
{
if(T[i].moyenne<10)
T[i].mention=" ajourne ";
else
if(T[i].moyenne<12)
T[i].mention=" passable ";
else
if(T[i].moyenne<14)
T[i].mention=" assez bien ";
else
if(T[i].moyenne<16)
T[i].mention=" bien ";
else
if(T[i].moyenne<18)
T[i].mention=" tres bien ";
else
if(T[i].moyenne<20)
T[i].mention=" excellent ";
}
}
void trier()
{
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(T[j].moyenne>T[i].moyenne)
{
e=T[i];
T[i]=T[j];
T[j]=e;
}
}
void rang()
{
T[0].rang=1;
i=0;
for(j=i+1;j<n;j++)
if(T[i].moyenne==T[j].moyenne)
T[j].rang=T[i].rang;
else
{
T[j].rang=j+1;
i=j;
}
}
void admis()
{
for(i=0;i<n;i++)
{
if(T[i].moyenne<10)
cout<<T[i].nom<<"\t"<<T[i].prenom<<"\t"<<T[i].age<<"\t"<<T[i].moyenne<<"\t"<<T[i].mentio
n<<"\t"<<T[i].rang<<"\n";
}
cout<<"\n-------\n";
Réalisé par MATY Maman Page 27
Support de cours de programmation en C++
}
void redoublant()
{
for(i=0;i<n;i++)
{
if(T[i].moyenne<10&&T[i].moyenne>=8)
cout<<T[i].nom<<"\t"<<T[i].prenom<<"\t"<<T[i].age<<"\t"<<T[i].moyenne<<"\t"<<T[i].mentio
n<<"\t"<<T[i].rang<<"\n";
}
cout<<"\n-------\n";
}
void exclu()
{
for(i=0;i<n;i++)
{
if(T[i].moyenne<8)
cout<<T[i].nom<<"\t"<<T[i].prenom<<"\t"<<T[i].age<<"\t"<<T[i].moyenne<<"\t"<<T[i].mentio
n<<"\t"<<T[i].rang<<"\n";
}
cout<<"\n-------\n";
}
int main()
{
saisie();
system("cls");
afficher(3);
system("pause");
mention();
trier();
rang();
system("cls");
afficher(3);
gotoxy(1,20);
admis();
redoublant();
exclu();
system(" pause ");
return 0;
}
TD4 Structures
EXO1:
Soit une structure étudiant composée des champs Nom, Prénom, Age, Moyenne, Rang et Mention.
1. Écrire une fonction qui permet de saisir la liste des étudiants
3. Écrire une fonction qui permet d'affecter une mention aux étudiants
8. Écrire une fonction qui permet rechercher un étudiant en fonction de Nom et de son Prénom
EXO2:
Soit une structure monôme composée des champs coefficient et exposant.
1. Écrire une fonction qui permet de saisir la liste des monômes (polynôme)
2. Écrire une fonction qui permet de calculer et afficher la dérivée d'un polynôme
3. Écrire une fonction qui permet de calculer et afficher la primitive d'un polynôme
4. Écrire une fonction qui permet de calculer et afficher la somme de deux polynômes
Exo3:
Soit une structure article composée des champs désignation; quantité; prix et Montant.
2. Écrire une fonction qui permet d'afficher la facture correspondante aux articles saisis;
3. Écrire une fonction qui permet de calculer et afficher le montant total hors taxe; le montant
TVA (18%) du montant hors taxe et le montant TTC.
void afficher(liste* t)
{ p=t;
while (p!=NULL)
{ cout<<p->elm<<" ";
p=p->svt;
}
cout<<endl;
}
6. Programme principal
int main()
{
menu();
return 0 ;
}
#include <cstring>
#include <iostream>
using namespace std;
struct liste{
int elm;
liste* svt;
};
liste *t,*t1,*t2;
int e;char ter;
while (ter=='n')
{
cout<<"Donnez l'element: ";
cin>>e;
p=new(liste);
p->elm=e;
p->svt=t;
t=p;
cout<<"Terminer? ";
cin>>ter;
}
return t;
}
while (ter=='n')
{
cout<<"Donnez l'element: ";
cin>>e;
p=new(liste);
p->elm=e;
p->svt=NULL;
if(t==NULL)
t=p;
else
if (p->elm<t->elm)
{ p->svt=t;
t=p;
}
else
{
r=t;
while(r->elm<=p->elm && r->svt!=NULL)
{ s=r;
r=r->svt;
}
if(r->elm>p->elm)
{ p->svt=r;
s->svt=p;
}
else
r->svt=p;
}
cout<<"Terminer? ";
cin>>ter;
}
return t;
}
void afficher(liste* t)
{ p=t;
while (p!=NULL)
{
cout<<p->elm<<" ";
p=p->svt;
}
}
int main()
{
menu();
return 0 ;
}
Lorsque vous créez un algorithme utilisant des conteneurs, il existe différentes manières de les
implémenter, la façon la plus courante étant les tableaux, que vous connaissez tous. Lorsque
vous créez un tableau, les éléments de celui-ci sont placés de façon contiguë en mémoire. Pour
pouvoir le créer, il vous faut connaître sa taille. Si vous voulez supprimer un élément au milieu du
tableau, il vous faut recopier les éléments temporairement, ré-allouer de la mémoire pour le
tableau, puis le remplir à partir de l'élément supprimé. En bref, ce sont beaucoup de
manipulations coûteuses en ressources.
Une liste chaînée est différente dans le sens où les éléments de votre liste sont répartis dans la
mémoire et reliés entre eux par des pointeurs. Vous pouvez ajouter et enlever des éléments
d'une liste chaînée à n'importe quel endroit, à n'importe quel instant, sans devoir recréer la liste
entière.
Nous allons essayer de voir ceci plus en détail sur ces schémas :
Vous avez sur ce schéma la représentation que l'on pourrait faire d'un tableau et d'une liste
chaînée. Chacune de ces représentations possède ses avantages et inconvénients. C'est lors de
l'écriture de votre programme que vous devez vous poser la question de savoir laquelle des deux
méthodes est la plus intéressante.
• Dans un tableau, la taille est connue, l'adresse du premier élément aussi. Lorsque vous
déclarez un tableau, la variable contiendra l'adresse du premier élément de votre
tableau.
Comme le stockage est contigu, et la taille de chacun des éléments connue, il est
possible d'atteindre directement la case i d'un tableau.
• Dans une liste chaînée, la taille est inconnue au départ, la liste peut avoir autant
d'éléments que votre mémoire le permet.
Il est en revanche impossible d'accéder directement à l'élément i de la liste chainée.
Pour ce faire, il vous faudra traverser les i-1 éléments précédents de la liste.
• Pour déclarer une liste chaînée, il suffit de créer le pointeur qui va pointer sur le premier
élément de votre liste chaînée, aucune taille n'est donc à spécifier.
Voilà deux schémas pour expliquer comment se passent l'ajout et la suppression d'un élément
d'une liste chaînée. Remarquez le symbole en bout de chaîne qui signifie que l'adresse de
l'élément suivant ne pointe sur rien, c'est-à-dire sur NULL.