TP6: More and more K&R coding style
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Mar 2017 20:27:32 +0000 (22:27 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Mar 2017 20:27:32 +0000 (22:27 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP6/hachage/lineaire/hachage_lineaire.c

index 58fcb5caba79232b3ea42fbf659bb248339aae93..c8ac848449b0ec3dc5555c29bd9961cc7dcdb764 100644 (file)
 #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     
@@ -112,4 +159,3 @@ printf("%d\n",inserer(3,tab));     affiche_tab(tab);
         <19,1> <0,0>  <0,0>  <23,1> <13,1> <5,1>  <3,1>         <0,0>  <0,0>  <9,1>
         
 *****************************************************************************/
-