Jaagdish47

Collision and Probing

Nov 23rd, 2024
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.00 KB | Source Code | 0 0
  1. Collision and Probing Technques
  2. 5A. Write a program to implement the collision technique
  3.  
  4. #include <stdio.h>
  5. #include <conio.h> // Required for Turbo C functions
  6.  
  7. int main() {
  8.     int n, i, m, key, hi[10], h[10], rel_add;
  9.     m = 10;
  10.  
  11.     clrscr(); // Clear the screen for Turbo C
  12.  
  13.     // Initialize the hash table
  14.     for (i = 0; i < m; i++) {
  15.         hi[i] = -1;
  16.     }
  17.  
  18.     printf("\nHash Table Size: %d", m);
  19.     printf("\nNo Of Keys: ");
  20.     scanf("%d", &n);
  21.  
  22.     printf("\nEnter The Keys: ");
  23.     for (i = 0; i < n; i++) {
  24.         printf("\n%d. ", i + 1);
  25.         scanf("%d", &key);
  26.  
  27.         // Calculate the relative address
  28.         rel_add = key % m;
  29.  
  30.         // Check for collision
  31.         if (hi[rel_add] == -1) {
  32.             hi[rel_add] = 1;
  33.             h[rel_add] = key;
  34.             printf("\tH(%d) = %d mod %d = %d", key, key, m, rel_add);
  35.         } else {
  36.             printf("\tH(%d) = %d mod %d = %d (Collision Case)", key, key, m, rel_add);
  37.         }
  38.     }
  39.  
  40.     getch(); // Wait for a key press before exiting
  41.     return 0;
  42. }
  43.  
  44. 5B. Write a program to implement the concept of linear probing.
  45. #include <stdio.h>
  46. #include <conio.h> // Required for Turbo C functions
  47.  
  48. int main() {
  49.     int n, i, m, key, hi[10], h[10], rel_add, p;
  50.     m = 10;
  51.  
  52.     clrscr(); // Clear the screen for Turbo C
  53.  
  54.     // Initialize the hash table
  55.     for (i = 0; i < m; i++) {
  56.         hi[i] = -1; // Indicates empty slots
  57.     }
  58.  
  59.     printf("\nHash Table Size: %d", m);
  60.     printf("\nNo of Keys: ");
  61.     scanf("%d", &n);
  62.  
  63.     printf("Enter Keys: ");
  64.     for (i = 0; i < n; i++) {
  65.         printf("\n%d. ", i + 1);
  66.         scanf("%d", &key);
  67.  
  68.         p = 0; // Probing count
  69.         rel_add = key % m;
  70.  
  71.         // Check if slot is available
  72.         if (hi[rel_add] == -1) {
  73.             hi[rel_add] = 1;
  74.             h[rel_add] = key;
  75.             printf("\tH(%d, %d) = %d", key, p, rel_add);
  76.         } else {
  77.             // Handle collision
  78.             printf("\tH(%d, %d) = %d (Collision Case!)", key, p, rel_add);
  79.             p = 1;
  80.  
  81.             // Perform linear probing
  82.             while (p < m) {
  83.                 printf("\n");
  84.                 rel_add = ((key % m) + p) % m;
  85.  
  86.                 if (hi[rel_add] == -1) {
  87.                     hi[rel_add] = 1;
  88.                     h[rel_add] = key;
  89.                     printf("\tH(%d, %d) = %d", key, p, rel_add);
  90.                     break;
  91.                 } else {
  92.                     p++;
  93.                 }
  94.             }
  95.  
  96.             // If table is full
  97.             if (p == m) {
  98.                 printf("\nHash table is full. Unable to insert key: %d", key);
  99.             }
  100.         }
  101.     }
  102.  
  103.     // Display the hash table
  104.     printf("\n\nFinal Hash Table:\n");
  105.     for (i = 0; i < m; i++) {
  106.         if (hi[i] != -1) {
  107.             printf("Slot %d: %d\n", i, h[i]);
  108.         } else {
  109.             printf("Slot %d: Empty\n", i);
  110.         }
  111.     }
  112.  
  113.     getch(); // Wait for a key press before exiting
  114.     return 0;
  115. }
Add Comment
Please, Sign In to add comment