Nous avons vu qu'un tableau est un objet statique, c'est à dire que sa dimension ne peut pas être modifiée pendant l'exécution d'un programme.
Il faut donc toujours prévoir large, c'est à dire déclarer un tableau de taille suffisante pour tous les cas de figure.
Cela signifie que l'on va en général remplir les tableaux partiellement jusqu'à un certain indice définissant la fin des données.
Pour représenter un tableau rempli partiellement, il faut donc nécessairement une variable entière qui contiendra à tout moment l'indice de fin des données.
Pour fixer les idées, prenons une variable T pour le tableau et une variable N pour l'indice de fin. On aura donc les déclarations suivantes:
final int M = Nombre maximum d'éléments; int N; int T[] = new int[M];
Les données utiles sont sockées dans les éléments d'indice 0 à N (schéma).
Le tableau est plein lorsque N est égal à M-1 (schéma)
Par convention, le tableau sera considéré comme vide sera lorsque N=-1 et non pas 0. Pourquoi pas zéro ? Parce que cela signifierait que T[0] est le dernier élément. Le tableau ne serait donc pas vide ! Mais pourquoi la valeur -1 ? Vous trouverez la réponse à cette question dans le paragraphe suivant.
Pour ajouter une valeur V dans un tableau rempli partiellement, le plus simple est de l'ajouter à la fin. On appelle cette opération empiler. L'élément qui suit le dernier prend la valeur V et l'indice de fin est incrémenté (schéma):
T [N+1] = V; N++;
Nous pouvons à présent voir l'intérêt de la convention N=-1 pour représenter un tableau vide, car avec cette convention les instructions précédentes permettent également d'empiler une valeur dans un tableau vide.
Insérer une valeur dans un tableau est une opération plus complexe. Supposons que l'on souhaite insérer une valeur V à l'indice P (P ≤ N) du tableau. Il faut d'abord "faire de la place" pour cette nouvelle valeur, c'est à dire décaler toutes les valeurs entre les indices P et N, d'un cran vers la droite. La valeur V peut ensuite être affectée à l'élément d'indice P. Puis, comme on a ajouté une valeur, l'indice de fin augmente de 1 (schéma):
for (i = N; i >= P; i--) T[i+1] = T[i]; T[P] = V; N++;
Le décalage d'une valeur d'un cran vers la droite se fait par l'affectation T[i+1] = T[i] répétée dans la boucle for. Notez que l'on est obligé de partir de la fin et de décrémenter le compteur. En procédant dans le sens inverse, on aurait recopié la valeur V vers la droite dans tous les éléments d'indice P à N+1 !
Le dernier élément d'un tableau est le plus simple à supprimer, pour cela il suffit de dépiler, c'est à dire de décrémenter l'indice de fin (schéma):
N--;
Supprimer l'élément d'indice P (P < N ) signifie décaler toutes les valeurs qui suivent P d'un cran vers la gauche, puis décrémenter l'indice de fin (schéma):
for (i=P; i <= N; i++) T[i] = T[i+1]; N--;
Un tableau rempli partiellement sur lequel on ne fait que des opérations empiler et dépiler est une structure de données fondamentale de l'informatique que l'on appelle une pile (stack en anglais).
En particulier, la gestion mémoire des variables locales et des paramètres de sous-programmes utilise une pile: les valeurs des variables sont empilées lorsque l'on rentre dans le sous-programme et dépilées à la sortie.