fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Estrutura do nó para encadeamento externo
  5. typedef struct No {
  6. int chave;
  7. struct No* prox;
  8. } No;
  9.  
  10. // Função para criar um novo nó
  11. No* criarNo(int chave) {
  12. No* novoNo = (No*)malloc(sizeof(No));
  13. novoNo->chave = chave;
  14. novoNo->prox = NULL;
  15. return novoNo;
  16. }
  17.  
  18. // Função para inserir uma chave na tabela de dispersão
  19. void inserir(No** tabelaHash, int chave, int m) {
  20. int k = chave % m;
  21. No* novoNo = criarNo(chave);
  22.  
  23. if (tabelaHash[k] == NULL) {
  24. tabelaHash[k] = novoNo;
  25. } else {
  26. No* temp = tabelaHash[k];
  27. while (temp->prox != NULL) {
  28. temp = temp->prox;
  29. }
  30. temp->prox = novoNo;
  31. }
  32. }
  33.  
  34. // Função para imprimir a tabela de dispersão
  35. void imprimirTabelaHash(No** tabelaHash, int m) {
  36. for (int i = 0; i < m; i++) {
  37. printf("%d ->", i);
  38. No* temp = tabelaHash[i];
  39. while (temp != NULL) {
  40. printf(" %d ->", temp->chave);
  41. temp = temp->prox;
  42. }
  43. printf(" \\\n");
  44. }
  45. }
  46.  
  47. // Função para liberar a memória da tabela de dispersão
  48. void liberarTabelaHash(No** tabelaHash, int m) {
  49. for (int i = 0; i < m; i++) {
  50. No* temp = tabelaHash[i];
  51. while (temp != NULL) {
  52. No* paraLiberar = temp;
  53. temp = temp->prox;
  54. free(paraLiberar);
  55. }
  56. }
  57. }
  58.  
  59. int main() {
  60. int n;
  61. scanf("%d", &n);
  62.  
  63. for (int i = 0; i < n; i++) {
  64. int m, c;
  65. scanf("%d %d", &m, &c);
  66.  
  67. No** tabelaHash = (No**)malloc(m * sizeof(No*));
  68. for (int j = 0; j < m; j++) {
  69. tabelaHash[j] = NULL;
  70. }
  71.  
  72. for (int j = 0; j < c; j++) {
  73. int chave;
  74. scanf("%d", &chave);
  75. inserir(tabelaHash, chave, m);
  76. }
  77.  
  78. imprimirTabelaHash(tabelaHash, m);
  79.  
  80. liberarTabelaHash(tabelaHash, m);
  81. free(tabelaHash);
  82.  
  83. if (i < n - 1) {
  84. printf("\n");
  85. }
  86. }
  87.  
  88. return 0;
  89. }
  90.  
Success #stdin #stdout 0s 5284KB
stdin
2
13 9
44 45 49 70 27 73 92 97 95
7 8
35 12 2 17 19 51 88 86
stdout
0 -> \
1 -> 27 -> 92 -> \
2 -> \
3 -> \
4 -> 95 -> \
5 -> 44 -> 70 -> \
6 -> 45 -> 97 -> \
7 -> \
8 -> 73 -> \
9 -> \
10 -> 49 -> \
11 -> \
12 -> \

0 -> 35 -> \
1 -> \
2 -> 2 -> 51 -> 86 -> \
3 -> 17 -> \
4 -> 88 -> \
5 -> 12 -> 19 -> \
6 -> \