Bonsoir,

Dans un petit programme que je développe, j'ai besoin d'une file de priorité minimale. J'ai choisi de l'implémenter sous forme de tas-min, de la même façon que dans Introduction à l'algorithmique. Mon problème est dans l'implémentation de l'opération insérer.

Afin de mettre les choses dans leur contexte, voici l'algorithme ... :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Fonction : inserer(f : file-min, e : element)
Paramètres : f la file à modifier, et e l'élément à insérer dans la file.
Insère e dans f.

DEBUT
|   /* ajout d'une nouvelle feuille, avec la clef la plus grand possible. */
|   taille[f]    <- taille[f] + 1
|   f[taille[f]] <- +INF
|   /* on réduit la clef de l'élément, pour qu'il trouve sa place dans le tas */
|   reduire-clef(f, taille[f], clef[e])
FIN
... et l'implémentation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
err_e fileMin_inserer(fileMin_s *f, arbre_s *a)
{
    err_e res = ERR_TAILLE;
 
    if (f->taille < FILEMIN_CAPACITE_MAX)
    {
        size_t nbocc = a->e.nbocc;
 
        a->e.nbocc = ULONG_MAX; /* FIXME */
 
        f->taille++;
        f->file[f->taille] = a;
 
        fileMin_reduireClef(f, f->taille, nbocc);
 
        res = ERR_OK;
    }
 
    return res;
}
Le problème se situe à la 9-ième ligne, marquée d'un FIXME.

Le champ nbocc, de type size_t doit prendre la plus grande valeur possible. Hors la norme ISO C90 ne définit ce type que comme un entier non signé, résultat de l'opérateur sizeof.
Il n'y a aucune garantie que size_t soit un typedef d'unsigned long, je m'avance donc un petit peu trop en lui affectant ULONG_MAX.

Ma question est donc : comment obtenir la limite superieure d'un size_t sur la machine qui compile ?

Merci d'avance.