Vous êtes sur la page 1sur 6
Les Les tableaux tableaux Tableau d’entiers : 0 1 2 Max … 1 37 Compteur

LesLes tableauxtableaux

Tableau

d’entiers :

0 1 2 Max … 1 37 Compteur : 3
0
1
2
Max
1 37
Compteur : 3

Les opérations :

•Insérer

•Rechercher

•Supprimer

LesLes tableauxtableaux :: insérerinsérer (2)(2)

Définitions

et

Déclarations

La fonction

#define MAX

100

#define VRAI

1

#define FAUX

0

int compteur 0; int tableau[MAX];

int inserer1(int valeur)

{

tableau[compteur++]=valeur;

}

Taille du tableau?

AlgorithmeAlgorithme etet StructuresStructures dede DonnéesDonnées

Wurtz Jean-Marie

Université Louis Pasteur Wurtz@igbmc.u-strasbg.fr

TableauxTableaux :: insérerinsérer

Tableau

d’entiers :

Tableau

d’entiers :

0 1 2 Max … 1 37 Compteur : 3 inserer(11) 0 1 2 Max
0 1
2
Max
1 37
Compteur : 3
inserer(11)
0
1
2
Max
1
3
7
11
Compteur : 4

TableauxTableaux :: insérerinsérer (3)(3)

int inserer2(int valeur)

{

int erreur=VRAI; if ( (compteur+1) < MAX) { erreur = FAUX; tableau[compteur++]=valeur;

}

return erreur;

}

COUT de l’insertion?

TableauxTableaux :: rechercherrechercher

 
rechercher(7)
rechercher(7)
 

0

1

2

Max

Tableau

1

3

 

11

   

d’entiers :

7

Compteur : 4

 
Compteur : 4  

TableauxTableaux :: SupprimerSupprimer

 
Supprimer(7)
Supprimer(7)
 

0

1

2

3

Max

Tableau

           

d’entiers :

1

3

7

11

Compteur : 4

 
Compteur : 4  

APRES

0 3

1

2

Max

Tableau

d’entiers :

 

1 …

3

11

     

Compteur : 4

Compteur : 4

TableauxTableaux :: lesles limiteslimites

•Taille fixe

•Union de deux tableaux

•Coût (N : nombre d’éléments dans la table) :

recherche : N/2 étapes

suppression : N/2 recherches

et N/2 décalages

TableauxTableaux :: rechercherrechercher (2)(2)

int rechercher(int valeur)

{

retour = -1;

for(i=0; i<compteur; i++) { if (tableau[i]==valeur) {retour = i; break}

return retour;

}

}

COUT de la recherche?

TableauxTableaux :: supprimersupprimer (2)(2)

int supprimer(int valeur)

{

}

pos = rechercher( valeur); if (pos != -1) { for(i=pos; i <compteur-1; i++) { tableau[i] = tableau[i+1];

}

}

COUT de la suppression?

TableauxTableaux ChainésChainés

libre

debut

libre

debut

TableauxTableaux ChainésChainés

123 N-1

N

libre debut libre debut Tableaux Tableaux Chainés Chainés 123 N-1 N 23 N-1 N 1 val

libre debut libre debut Tableaux Tableaux Chainés Chainés 123 N-1 N … 23 N-1 N 1

23 N-1

N

1 val
1
val

libre debut libre debut Tableaux Tableaux Chainés Chainés 123 N-1 N … 23 N-1 N 1

TableauxTableaux ChaînésChaînés :: initialiserinitialiser

libre :

0

début :

-1

début : -1  
 

Données :

 

-

 

---

   

 
 
 
 
 
 
 
         

Suivants :

 

1

 

234

 

5

 

0

1

2

3

4

Max-1

TableauxTableaux ChainésChainés :: insérerinsérer enen têtetête dede liste(1)liste(1)

TableauxTableaux ChainésChainés :: insérerinsérer enen têtetête dede liste(2)liste(2)

libre :

1

Insérer(7)
Insérer(7)
 

libre :

3

Insérer(11) Insérer(13)
Insérer(11)
Insérer(13)
 

début :

0

début : 0   début : 2
 

début :

2

2

Données :

 

7

 

---

   

Données :

7

11

13

-

 

 
  … …
  … …
  … …
…

  … …
  … …
  … …
  … …
…

  … …

Suivants :

 

-1

2

3

4

5

Suivants :

-1

0

1

4

5

 

0

1

2

3

4

Max-1

0

1

2

3

4

Max-1

TableauxTableaux ChainésChainés :: insérerinsérer enen têtetête dede liste(3)liste(3)

int libre;

 

int debut;

int donnees[MAX];

int inserer(int valeur)

{

int suivant[MAX];

int tmp;

int initialiser()

{

donnees[libre]=valeur;

int i; debut=-1; libre=0; for(i=0; i<MAX-1;i++) {

tmp=suivant[libre];

suivant[libre]=debut;

suivant[i]=i+1;

debut = libre;

}

libre=tmp;

suivant[MAX-1]=-1;

}

}

Vérifier la fin du tableau!!!

TableauxTableaux ChainésChainés :: supprimersupprimer

libre : 3 début : 2 supprimer(13) … Données : 7 11 13 - …
libre :
3
début :
2
supprimer(13)
Données :
7
11
13
-
Suivants :
-1
0
1
4
5
0
1
2
3
4
Max-1

TableauxTableaux ChainésChainés :: supprimer(2)supprimer(2)

libre :

2

supprimer(13)
supprimer(13)

début :

1

1
 

Données :

7

11

13 - 3 4 5
13
-
3
4
5

 
 
 
 
   

Suivants :

-1

0

0

1

2

3

4

 

Max-1

TableauxTableaux ChainésChainés :: supprimersupprimer (4)(4)

début : 2 supprimer(11) libre : 1 pp p … Données : 7 11 13
début :
2
supprimer(11)
libre :
1
pp
p
Données :
7
11
13
-
Suivants :
-1
3
0
4
5
0
1
2
3
4
Max-1

TableauxTableaux ChainésChainés :: lesles limiteslimites

•Taille fixe et taille plus importante

•Union de deux tableaux

•Coût (N : nombre d’éléments dans la table) :

recherche : N/2 étapes

suppression : N/2 recherches

et aucun décalage

•Gestion de l’espace : allocation/libération

TableauxTableaux ChainésChainés :: supprimersupprimer (3)(3)

libre : 3 début : 2 supprimer(11) p pp … Données : 7 11 13
libre :
3
début :
2
supprimer(11)
p
pp
Données :
7
11
13
-
Suivants :
-1
0
1
4
5
0
1
2
3
4
Max-1

TableauxTableaux ChainésChainés :: supprimer(5)supprimer(5)

int supprimer(int valeur)

 

/*

code sinon

*/

{

int p; if (données[debut] == valeur) { p=suivant[debut];

int pp; p=debut; while(suivant[p] ! = -1){ pp=suivant[p]; if (données[pp] == valeur) { suivant[p]=suivant[pp]; suivant[pp]=libre; libre=pp; break;

}

suivant[debut]=libre;

libre=debut; debut=p;

} else {

/*

code sinon

*/

}

}

 

p=pp;

}

InsérerInsérer enen finfin dede listeliste

TableauxTableaux ChainésChainés :: insérer(1)insérer(1)

TableauxTableaux ChainésChainés :: insérer(2)insérer(2)

libre :

1

Insérer(7)
Insérer(7)
 

libre :

3

Insérer(11) Insérer(13)
Insérer(11)
Insérer(13)
 

début :

0

début : 0   début : 0
 

début :

0

0

Données :

 

7

 

---

   

Données :

7

 

11

13

-

 

 
 
 
 
 
 
 
 
 
 
 
                     

Suivants :

 

-1

2

3

4

5

Suivants :

1

 

2

-1

4

5

 

0

1

2

3

4

Max-1

0

1

2

3

4

Max-1

TableauxTableaux ChainésChainés :: supprimersupprimer TableauxTableaux ChainésChainés :: supprimer(2)supprimer(2)
TableauxTableaux ChainésChainés :: supprimersupprimer
TableauxTableaux ChainésChainés :: supprimer(2)supprimer(2)
supprimer(7)
supprimer(7)
libre :
3
début :
1
début :
0
libre :
0
Données :
7
11
13
-
Données :
-
11
13
-
Suivants :
1
2
-1
4
5
Suivants :
3
2
-1
4
5
0
1
2
3
4
Max-1
0
1
2
3
4
Max-1

TableauxTableaux ChainésChainés :: supprimersupprimer (3)(3)

supprimer(11) libre : 3 pp début : 0 p … Données : 7 11 13
supprimer(11)
libre :
3
pp
début :
0
p
Données :
7
11
13
-
Suivants :
1
2
-1
4
5
0
1
2
3
4
Max-1

TableauxTableaux ChainésChainés :: supprimersupprimer (4)(4)

supprimer(11) libre : 1 pp début : 0 p … Données : 7 11 13
supprimer(11)
libre :
1
pp
début :
0
p
Données :
7
11
13
-
Suivants :
2
3
-1
4
5
0
1
2
3
4
Max-1

PourPour parcourirparcourir lala listeliste

• Avec le tableau seul, le suivant de pos est:

– pos++

• Avec la liste chaînée décrite par deux tableaux, le suivant de pos est :

– pos=suivants[pos]