-
Notifications
You must be signed in to change notification settings - Fork 0
/
hash.c
126 lines (92 loc) · 2.15 KB
/
hash.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Estrutura base do nó->
struct Node
{
int valor;
struct Node *proximo;
};
typedef struct Node node;
// funcao que retorna o ultimo digito do numero como chave de hash
int hash(int codigo)
{
int chave = codigo;
while (chave >= 10)
{
chave = chave % 10;
}
return chave;
}
// imprime a lista na posicao da chave hash
void displayLL(int chave, node *p)
{
int i;
printf("\nposicao %d:", chave);
if (p)
{
do
{
printf(" %d ", p->valor);
p = p->proximo;
} while (p);
}
else
printf("nodo vazio.");
}
void inserir(node *raiz, int codigo){
node *novo = (node *)malloc(sizeof(node));
novo->valor = codigo;
novo->proximo = NULL;
while (raiz->proximo){
raiz = raiz->proximo;
}
novo = raiz->proximo;
}
int main(void)
{
int tamanho_da_tabela_hash = 10;
node *tabela_hash[tamanho_da_tabela_hash];
for (int i = 0; i < tamanho_da_tabela_hash; i++)
{
tabela_hash[i] = NULL;
}
// criando o primeiro nodo na tabela hash
int codigo1 = 100112345;
int chave1 = hash(codigo1);
// criando o primeiro nodo na tabela hash
tabela_hash[chave1] = (node *)malloc(sizeof(node));
tabela_hash[chave1]->valor = codigo1;
tabela_hash[chave1]->proximo = NULL;
// informacoes para inserir o segundo nodo
int codigo2 = 100154321;
int chave2 = hash(codigo2);
// criando o segundo nodo na tabela hash
tabela_hash[chave2] = (node *)malloc(sizeof(node));
tabela_hash[chave2]->valor = codigo2;
tabela_hash[chave2]->proximo = NULL;
int codigo3 = 100112365;
int chave3 = hash(codigo3);
if (tabela_hash[chave3] == NULL){
tabela_hash[chave3] = (node *)malloc(sizeof(node));
tabela_hash[chave3]->valor = codigo3;
tabela_hash[chave3]->proximo = NULL;
}
else{
printf("entrouuuu");
inserir(tabela_hash[chave3],codigo3);
}
// imprimindo toda a estrutura
for (int i = 0; i < 10; i++)
{
if (tabela_hash[i])
{
displayLL(i, tabela_hash[i]);
}
else
{
printf("\nposicao %d, nodo vazio", i);
}
}
return 0;
}