Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2020
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct cell
  5. {
  6. int key;
  7. int status;
  8. } Cell;
  9.  
  10. enum { FREE, OCCUPIED };
  11.  
  12. void afisare(Cell *T, int m)
  13. {
  14. printf("\n\nTabela de dispersie este \n");
  15. for (int i = 0; i < m; i++)
  16. {
  17. if(T[i].status == OCCUPIED)
  18. printf("T[%d]=%d\n",i,T[i]);
  19. else
  20. printf("T[%d]= --\n",i);
  21. }
  22. }
  23.  
  24. void insert_key_linear(int k, Cell *T, int m)
  25. {
  26. int i;
  27. for(i = 0; i < m; i++) {
  28. int h = linear_probing(k, m, i);
  29. if (T[h].status == FREE) {
  30. T[h].status = OCCUPIED;
  31. T[h].key = k;
  32. break;
  33. }
  34. }
  35. }
  36.  
  37. void insert_key_quadratic(int k, Cell *T, int m)
  38. {
  39. int i;
  40. for(i = 0; i < m; i++) {
  41. int h = quadratic_probing(k, m, i);
  42. if (T[h].status == FREE) {
  43. T[h].status = OCCUPIED;
  44. T[h].key = k;
  45. break;
  46. }
  47. }
  48. }
  49.  
  50. void insert_key_double_hashing(int k, Cell *T, int m)
  51. {
  52. int i;
  53. for(i = 0; i < m; i++) {
  54. int h = double_hashing(k, m, i);
  55. if (T[h].status == FREE) {
  56. T[h].status = OCCUPIED;
  57. T[h].key = k;
  58. break;
  59. }
  60. }
  61. }
  62.  
  63.  
  64. int h_prime(int k, int m)
  65. {
  66. return 0;
  67. }
  68.  
  69. //returneaza pozitia la care se va verifica tabela de dispersie folosind verificarea liniara
  70. int linear_probing(int k, int m, int i)
  71. {
  72. return ((k % m) + i) % m;
  73. }
  74.  
  75. int quadratic_probing(int k, int m, int i)
  76. {
  77. return (k % m + i + i * i) % m;
  78. }
  79.  
  80. int double_hashing(int k, int m, int i)
  81. {
  82. return ((k % m) + i * (5 - (k % 5))) % m;
  83. }
  84.  
  85. void set_table_free(Cell *T, int m)
  86. {
  87. //initializam tabela
  88. int i;
  89. for (i = 0; i<m; i++)
  90. {
  91. T[i].status = FREE;
  92. }
  93. }
  94.  
  95. int main()
  96. {
  97. int m = 7;
  98. Cell *T = (Cell*) malloc(m*sizeof(Cell)); //tabela de dispersie - se aloca
  99.  
  100. //test linear probing
  101. set_table_free(T, m);
  102. int vals[] = {19, 36, 5, 21, 4, 26, 14, 17};
  103. for(int i=0; i<sizeof(vals)/sizeof(int); i++)
  104. insert_key_linear(vals[i], T, m);
  105. afisare(T, m);
  106. //21, 36, 26, 14, 4, 19, 5
  107.  
  108. //test quadratic probing
  109. set_table_free(T, m);
  110. for(int i=0; i<sizeof(vals)/sizeof(int); i++)
  111. insert_key_quadratic(vals[i], T, m);
  112. afisare(T, m);
  113. //k + i + i*i mod m: 19, 36, 5, 4, 21, 26, 14
  114.  
  115. //test double hashing
  116. set_table_free(T, m);
  117. for(int i=0; i<sizeof(vals)/sizeof(int); i++)
  118. insert_key_double_hashing(vals[i], T, m);
  119. afisare(T, m);
  120. //k + i*2^k mod m: 21, 36, 5, 14, 4, 19, 26
  121.  
  122.  
  123. //test hash function
  124. insert_key_double_hashing(100000, T, m);
  125. afisare(T, m);
  126. insert_key_linear(-3, T, m);
  127. afisare(T, m);
  128. free(T);
  129. return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement