Vous êtes sur la page 1sur 16

Chapitre 4 :

Les tableaux
Sommaire

Mise en situation
I- Les tableaux
1- Les tableaux unidimensionnels
2- Les tableaux multidimensionnels
II- Les tableaux et les pointeurs
III- Opérations sur les tableaux
1- Tri par sélection du minimum
2- Tri par insertion
3- Tri à bulles
4- Tri rapide (quicksort)

Mise en situation :
Les variables ( int float char) ne permettent de stocker qu'une seule
donnée à la fois. Ces variables distinctes seraient beaucoup trop lourdes à
gérer. Le langage C propose les tableaux, permettant de stocker plusieurs
données de même type.

I‐ Les tableaux

Un tableau est une structure de données linéaire qui regroupe de manière contiguë
en mémoire (les unes à la suite des autres) des variables de même type.

Un tableau est donc une suite contigüe de cases (espace mémoire) de même taille. La taille
de chacune des cases est déterminée par le type de donnée que le tableau contient.

donnée donnée donnée ... donnée donnée donnée

Représentation d’un tableau

Les éléments du tableau peuvent être :


- des données de type simple : int, char, float, long, double...

31
(la taille d'une case du tableau est alors le nombre d'octets sur lequel la donnée
est codée) ;
- des structures ;
- des tableaux.
- des pointeurs (variables contenant des adresses mémoires) ;

Attention :
Etant donné qu'un tableau est composé d'un nombre fixé d'éléments d'un
type donné, la taille d'un tableau est déterminée dès sa déclaration.

 Classification des tableaux :

- Lorsque le tableau est composé de données de type simple, on parle de tableau


monodimensionnel (ou vecteur).
- Lorsque celui-ci contient lui-même d'autres tableaux on parle alors de tableaux
multidimensionnels (ou matrice )

1‐ Les tableaux unidimensionnels

Un tableau unidimensionnel est un tableau qui contient des éléments qui ne sont pas
des tableaux.

Syntaxe :
La déclaration d'un tableau unidimensionnel est la suivante :

type Nom_du_tableau [Nombre d'éléments] ;

Représentation
Un tableau unidimensionnel contenant n entiers est représenté de la façon suivante :

indice 0 1 2 ... n
int int int .. int int Int

Exemple :

La déclaration d'un tableau qui doit contenir 8 éléments de type char :

char Tableau [8] ={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’};

indice 0 1 2 3 4 5 6 7
A B C D E F G H

32
Accéder aux éléments

Pour accéder à un élément du tableau : le nom du tableau, suivi de l'indice de l'élément


entre crochets :

Nom_du_tableau[indice] ;

Remarque :

- L'indice du premier élément du tableau est 0


- L'indice du dernier élément du tableau est égal au nombre d'éléments – 1

Initialiser les éléments


Lorsque l'on définit un tableau, les valeurs des éléments qu'il contient ne sont pas
définies, il faut donc les initialiser (leur affecter une valeur).

 - Initialisation de chaque élément :


Affecter des valeurs aux éléments un par un:

Nom_Tableau[0] = Valeur 1 ;
Nom_Tableau[1] = Valeur 2 ;
Nom_Tableau[2] = Valeur 3 ;

Initialisation avec des boucles :


Utiliser une boucle (for) qui va permettre d'initialiser successivement chacun des
éléments.

for (i=0 ;i<taille_du_tableau ;i++)


{
printf("Entrer la valeur %d:\n") ;
scanf("%d", & Nom_Tableau[i]) ; //%d %c %f selon le cas
}

Initialisation à la déclaration :
D’initialiser le tableau à la définition en plaçant entre accolades les valeurs, séparées par
des virgules :

int Tableau[10] = {1, 2, 6, 5, 2, 1, 9, 8, 1, 5};

33
2‐ Les tableaux multidimensionnels

Mise en situation :
Lignes et colonnes

Solution :

Exercice :
Comment représenter une année ? (1 an =56 semaines).

Les tableaux multidimensionnels sont des tableaux qui contiennent des tableaux.
On les appelle également : Matrices

Syntaxe :
La déclaration d’un tableau multidimensionnel se définit de la manière suivante :

type Nom_du_tableau [a1][a2][a3] ... [aN]

Exemple :
Définira avec la syntaxe suivante :

int Tableau [3][4]

34
On peut représenter un tel tableau de la manière suivante :

Tableau[0][0] Tableau[0][1] Tableau[0][2] Tableau[0][3]


Tableau[1][0] Tableau[1][1] Tableau[1][2] Tableau[1][3]
Tableau[2][0] Tableau[2][1] Tableau[2][2] Tableau[2][3]

- C’est un tableau qui comporte 3 éléments, chaque élément est un tableau de 4


éléments.
- Les valeur-s sont attribuées aux éléments successifs en incrémentant d'abord les
indices de droite, c'est-à-dire pour un tableau à 2 dimensions : [0][0], [0][1], [0][2]
... puis [1][0] etc.

Représentation
Tableau bidimensionnel (3 lignes, 4 colonnes) est stocké en mémoire de la manière
suivante :

Ou bien

II‐ Les tableaux et les pointeurs

Les écritures suivantes sont équivalentes:

Déclaration int *tableau; int tableau[10];


tableau = malloc(sizeof(int)*10);
…….
free(tableau)
adresse du 1er élément tableau &tableau[0]
adresse d'un autre élément (tableau + i) &(tableau[i])
le 1er élément *tableau tableau[0]
un autre élément *(tableau+i) tableau[i]

35
Attention :
- La déclaration d'un tableau entraîne automatiquement la
réservation de places en mémoire.
- Ce n'est pas le cas lorsque l'on déclare un pointeur. Il faut alors
utiliser une fonction d'allocation dynamique comme malloc.

Exemple :

36
En résumé :

III‐ Opérations sur les tableaux

On peut effectuer sur les tableaux plusieurs opérations :


- Permuter deux éléments
- Supprimer un élément ? (+ décalage)
- Décaler un élément ? (+ sauvegarde)
- Ajouter un élément ?( chercher position + sauvegarde + décalage)
- Trier un tableau

Algorithmes du Tri

Trier un ensemble d’objets consiste à les ordonner en fonction d’une relation d’ordre
définie sur ces objets.

Il faut connaitre qu'il existe 6 algorithmes connus pour trier les éléments d’un tableau :

 tri par sélection


 tri par insertion
 tri a bulle
 tri rapide
 tri par permutation
 tri par fusion

Cependant on ne va détailler que les 2 premiers types

37
1. Tri par sélection du minimum

Exemple : Tri par sélection : Trier un jeu de carte à la main !

Principe : Le principe du tri par sélection du minimum est d'aller


• Rechercher le plus petit élément et le permuter avec le premier élément t[0].
• Rechercher le deuxième petit élément et le permuter avec le deuxième élément
t[1].
• Faire la même chose avec le reste des éléments jusqu'à ce que le tableau soit
trié.

38
Explication de l’exemple :

Exemple :

Exemple de tri par sélection

39
Programme : Travaux Pratique

40
2. Tri par insertion :
Le principe du tri par insertion est de trier les éléments du tableau comme avec des cartes
: prendre les éléments du tableau un à un, et de les insérer au bon endroit.

Tri par insertion : Exemple concret

41
Principe de l’algorithme
- Les éléments à trier étaient donnés un par un.
- Prendre le premier élément :
le premier élément constituant, à lui tout seul, un tableau trié de longueur 1.
- On classe ensuite le second élément pour constituer un tableau trié de longueur 2,
- puis on classe le troisième élément pour avoir une liste triée de longueur 3
…. et ainsi de suite...

Le principe est donc d’insérer à la nième itération le nième élément à la bonne place.

Exemple :

42
Explication de l’exemple :

43
Programme : Travaux Pratique

44
3. Tri à bulles :

Il consiste à parcourir la liste en échangeant les paires d'éléments consécutifs qui ne sont
pas dans l'ordre. On effectue autant de parcours que des échanges sont nécessaires.
Autrement dit, on arrête dès qu'un parcours n'a fait aucun échange. Voir la figure gauche
ci-dessous.

Exemple de tri à bulles

4. Tri rapide (quicksort) :


Cette méthode consiste à choisir une valeur pivot, et séparer les éléments de la liste en
deux parties : ceux inférieurs au pivot, et ceux supérieurs au pivot. Les deux parties sont
alors triées, puis concaténées (la partie inférieure avant la partie supérieure). Pour le
pivot, on peut prendre le premier élément de la liste à trier. Voir la figure droite ci-
dessous.

45
Exemple de tri rapide

Conclusion : Tableaux

 Avantages :
 Stocke des éléments même types,
 Les éléments sont stockés dans des emplacements de mémoire contigus
 Peut accéder facilement aux éléments à tout moment en utilisant l'index
 Tri et itération faciles

 Inconvénients :
 La taille est fixe
 Difficile à insérer et à supprimer
 Nécessite de la mémoire contiguë pour être allouée
 Si la taille déclarée est supérieure à celle utilisée : espace mémoire gaspillé.
 Espace mémoire figé : Impossible de l’agrandir (à moins d'en créer de nouveaux,
plus grands).
 On ne peut pas agrandir un tableau après sa création
 Insérer/supprimer une case au milieu : décaler d’autres éléments.
Cas d’utilisation :
• Pour stocker des informations de manière linéaire
• Convient aux applications nécessitant des recherches fréquentes

46

Vous aimerez peut-être aussi