#define LIBERE -1
#define M 10
-typedef struct {int cle;
- int etat;
- } t_elem;
-
-void affiche_tab(t_elem *tab)
-{int i;
- for (i = 0 ; i <M ; i++) printf("<%2d,%2d>",tab[i].cle,tab[i].etat);
- printf("\n");
+typedef struct {
+ int cle;
+ int etat;
+} t_elem;
+
+void affiche_tab(t_elem * tab)
+{
+ int i;
+
+ for (i = 0; i < M; i++)
+ printf("<%2d,%2d>", tab[i].cle, tab[i].etat);
+ printf("\n");
}
-int h(int x) /* mauvaise fonction de hachage - juste pour tester */
-{return x%M;}
+int h(int x)
+{ /* mauvaise fonction de hachage - juste pour tester */
+ return x % M;
+}
-int rechercher(int x,t_elem *tab)
+int rechercher(int x, t_elem * tab)
/* retourne l'indice de x dans la table si x est present, -1 sinon */
-{int i=0,v=h(x);
- while (i<M)
- if ((tab[v].etat==VIDE) || ((tab[v].etat==OCCUPE) &&
-(tab[v].cle==x)))
- break;
- else {i++;v++;if (v>=M) v=0;
- };
-
-if ((tab[v].etat==OCCUPE) && (tab[v].cle==x)) /* x présent */ return v;
- else /* x absent */ return -1;
+{
+ int i = 0, v = h(x);
+
+ while (i < M)
+ if ((tab[v].etat == VIDE) || ((tab[v].etat == OCCUPE) &&
+ (tab[v].cle == x)))
+ break;
+ else {
+ i++;
+ v++;
+ if (v >= M)
+ v = 0;
+ };
+
+ if ((tab[v].etat == OCCUPE) && (tab[v].cle == x)) /* x présent */
+ return v;
+ else /* x absent */
+ return -1;
}
-int supprimer(int x,t_elem *tab)
+int supprimer(int x, t_elem * tab)
/* supprime x de la table, s'il est présent (et alors retourne son indice),
- et ne fait rien si x est absent (et alors retourne -1)
-*/
-{int v = rechercher(x,tab);
- if (v!=-1) /*x present */ {tab[v].etat=LIBERE; return v;
- }
- else /* x absent */ return -1;
+ et ne fait rien si x est absent (et alors retourne -1) */
+{
+ int v = rechercher(x, tab);
+
+ if (v != -1) { /*x present */
+ tab[v].etat = LIBERE;
+ return v;
+ } else /* x absent */
+ return -1;
}
-
-int inserer(int x,t_elem *tab)
+
+int inserer(int x, t_elem * tab)
/* si x n'est pas dans la table, on l'insère a la première place vide ou liberee
rencontrée au cours des essais successifs (et on retourne son indice);
si x est déjà dans la table, on ne fait rien (et on retourne son indice);
si le tableau est plein, c'est que x n'a pu être insèré et on retourne -1 */
-{int i=0,lib=-1,v=h(x);
- while (i<M)
- {if (tab[v].etat==VIDE) break;
- /*x absent, on arrête le parcours du tableau */
- if ((tab[v].etat==OCCUPE) && (tab[v].cle==x)) return v;
- /* x déjà présent, on ne fait rien */
- if ((tab[v].etat==LIBERE) && (lib==-1)) lib=v;
- /* on mémorise l'indice de la première place libérée */
- i++;v++;if (v>=M) v=0;
- /* on continue tant qu'on ne trouve pas x ou une place vide */
- }
-
- if (tab[v].etat==VIDE)
- if (lib==-1) {tab[v].cle=x;tab[v].etat=OCCUPE;return v;}
- else {tab[lib].cle=x;tab[lib].etat=OCCUPE;return lib;}
- else return -1;
+{
+ int i = 0, lib = -1, v = h(x);
+
+ while (i < M) {
+ if (tab[v].etat == VIDE)
+ break;
+ /*x absent, on arrête le parcours du tableau */
+ if ((tab[v].etat == OCCUPE) && (tab[v].cle == x))
+ return v;
+ /* x déjà présent, on ne fait rien */
+ if ((tab[v].etat == LIBERE) && (lib == -1))
+ lib = v;
+ /* on mémorise l'indice de la première place libérée */
+ i++;
+ v++;
+ if (v >= M)
+ v = 0;
+ /* on continue tant qu'on ne trouve pas x ou une place vide */
+ }
+
+ if (tab[v].etat == VIDE)
+ if (lib == -1) {
+ tab[v].cle = x;
+ tab[v].etat = OCCUPE;
+ return v;
+ } else {
+ tab[lib].cle = x;
+ tab[lib].etat = OCCUPE;
+ return lib;
+ } else
+ return -1;
}
-int main ()
-{int i;
- t_elem *tab;
-
-tab = (t_elem *)calloc((M),sizeof(t_elem));
-if (tab == NULL) {printf("memoire insuffisante\n"); exit(-1); }
-
-for (i=0;i<M;i++) tab[i].etat = VIDE;
-
-affiche_tab(tab);
-printf("%d\n",inserer(3,tab)); affiche_tab(tab);
-printf("%d\n",inserer(5,tab)); affiche_tab(tab);
-printf("%d\n",inserer(13,tab)); affiche_tab(tab);
-printf("%d\n",inserer(9,tab)); affiche_tab(tab);
-printf("%d\n",inserer(19,tab)); affiche_tab(tab);
-printf("%d\n",supprimer(3,tab)); affiche_tab(tab);
-printf("%d\n",rechercher(3,tab)); affiche_tab(tab);
-printf("%d\n",inserer(23,tab)); affiche_tab(tab);
-printf("%d\n",inserer(3,tab)); affiche_tab(tab);
+int main()
+{
+ int i;
+ t_elem *tab;
+
+ tab = (t_elem *) calloc((M), sizeof(t_elem));
+ if (tab == NULL) {
+ printf("memoire insuffisante\n");
+ exit(-1);
+ }
+
+ for (i = 0; i < M; i++)
+ tab[i].etat = VIDE;
+
+ affiche_tab(tab);
+ printf("%d\n", inserer(3, tab));
+ affiche_tab(tab);
+ printf("%d\n", inserer(5, tab));
+ affiche_tab(tab);
+ printf("%d\n", inserer(13, tab));
+ affiche_tab(tab);
+ printf("%d\n", inserer(9, tab));
+ affiche_tab(tab);
+ printf("%d\n", inserer(19, tab));
+ affiche_tab(tab);
+ printf("%d\n", supprimer(3, tab));
+ affiche_tab(tab);
+ printf("%d\n", rechercher(3, tab));
+ affiche_tab(tab);
+ printf("%d\n", inserer(23, tab));
+ affiche_tab(tab);
+ printf("%d\n", inserer(3, tab));
+ affiche_tab(tab);
}
+
/*****************************************************************************
<0,0> <0,0> <0,0> <0,0> <0,0> <0,0> <0,0> <0,0> <0,0> <0,0>
3
<19,1> <0,0> <0,0> <23,1> <13,1> <5,1> <3,1> <0,0> <0,0> <9,1>
*****************************************************************************/
-