Tables de hachage en C

Tables de hachage en C - C - Programmation

Marsh Posté le 10-04-2006 à 15:42:33    

Bonjour,
je dois faire une table de hachage mais il y a des erreurs con dans mon prog mais je n'arrive pas à les résoudre. De plus je vois pas trop comment je peux remplir le main.
Merci pour votre aide.
 
Voici le prog :
#include<memory.h>
#include<stdio.h>
#define TRUE 1
#define FALSE 0
 
typedef struct cell_struct{
 char *key;
 int value;
 struct cell_struct *next;
}cell_t;
 
typedef struct{
 int size;
 int count;
 cell_t **cells;
}table_t;
 
unsigned long Chaine_hacher(char *s){
 unsigned long somme=0;
 for( ;*s != '\0' ; ++s){
  somme=223 * somme + *((unsigned long*)s);
 }
 return somme;
}
 
void Table_initialiser(table_t *t, int size){
 t->size = size;  
 t->count = 0;
 t->cells = (cell_t**) malloc(size*sizeof(cell_t*));
 memset(t->cells, 0*00, size*sizeof(cell_t*));
}
 
void Table_detruire(table_t *t){
 int i;
 
 for (i = 0 ; i < t->size ; ++i){
  cell_t * cell = t->cells[i];
 
  while (cell != NULL){
   cell_t * del = cell;
   free(del->key);
   free(del);
   cell = cell->next;
  }
 }
 free(t);
}
 
void Table_ajouter(table_t*t, char *key, int val){
 unsigned long idx = Chaine_hacher(key) % t->size;
 cell_t * new_cell = Table_initialiser(t, size);
 t->cells[idx] = new_cell;
 t->count += 1;
}
 
int Table_rechercher(table_t*t, char *key, int *val){
 unsigned long idx = Chaine_hacher(key) % t->size;
 if(idx == NULL){
  return FALSE;
 }
}
 
 
 
int main(){
 
}

Reply

Marsh Posté le 10-04-2006 à 15:42:33   

Reply

Marsh Posté le 10-04-2006 à 15:46:42    

salut, utilise des balises de code stp.


---------------
TriScale innov
Reply

Marsh Posté le 10-04-2006 à 15:48:27    

OK Dsl

Code :
  1. #include<memory.h>
  2. #include<stdio.h>
  3. #define TRUE 1
  4. #define FALSE 0
  5. typedef struct cell_struct{
  6. char *key;
  7. int value;
  8. struct cell_struct *next;
  9. }cell_t;
  10. typedef struct{
  11. int size;
  12. int count;
  13. cell_t **cells;
  14. }table_t;
  15. void Table_initialiser(table_t *t, int size){
  16. t->size = size;
  17. t->count = 0;
  18. t->cells = (cell_t**) malloc(size*sizeof(cell_t*));
  19. memset(t->cells, 0*00, size*sizeof(cell_t*));
  20. }
  21. void Table_detruire(table_t *t){
  22. int i;
  23. for (i = 0 ; i < t->size ; ++i){
  24.  cell_t * cell = t->cells[i];
  25.  while (cell != NULL){
  26.   cell_t * del = cell;
  27.   free(del->key);
  28.   free(del);
  29.   cell = cell->next;
  30.  }
  31. }
  32. free(t->cells);
  33. }
  34. void Table_ajouter(table_t*t, char *key, int val){
  35. unsigned long idx = Chaine_hacher(key) % t->size;
  36. while(t != NULL){
  37.  t->cells = *next;
  38. }
  39. t->cells = *key;
  40. t->cells = val;
  41. }
  42. int Table_rechercher(table_t*t, char *key, int *val){
  43. unsigned long idx = Chaine_hacher(key) % t->size;
  44. if(idx == NULL){
  45.  return FALSE;
  46. }
  47. }
  48. unsigned long Chaine_hacher(char *s){
  49. unsigned long somme=0;
  50. for( ;*s != '\0' ; ++s){
  51.  somme=223 * somme + *((unsigned long*)s);
  52. }
  53. return somme;
  54. }
  55. int main(){
  56. }

Reply

Marsh Posté le 10-04-2006 à 15:49:56    

... et quelles sont les erreurs :??: Ma boule de crystal est encore naze :(


Message édité par _darkalt3_ le 10-04-2006 à 15:54:12
Reply

Marsh Posté le 10-04-2006 à 15:51:16    

alexletiti a écrit :

Bonjour,
je dois faire une table de hachage mais il y a des erreurs con dans mon prog mais je n'arrive pas à les résoudre.


  • <memory.h>, ça n'existe pas. Pour malloc() etc., c'est <stdlib.h>
  • manque <string.h> pour memset()
  • Dans Table_ajouter(), size n'est pas défini. C'est probablemment t->size... L'appel est incohérent. La fonction ne retourne pas de valeur...  


C'est brouillon ce code. Il n'y a pas de document de conception ? Il faut cesser de coder au hasard...


Message édité par Emmanuel Delahaye le 10-04-2006 à 15:52:00

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed