-
Notifications
You must be signed in to change notification settings - Fork 0
/
1256.c
80 lines (60 loc) · 1.64 KB
/
1256.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
#include <stdio.h>
#include <stdlib.h>
typedef struct no_lista{
int valor;
struct no_lista *proximo;
} NoLista;
typedef struct lista_encadeada{
NoLista *primeiro;
NoLista *ultimo;
} ListaEncadeada;
void inserir_na_hash(ListaEncadeada *, const int);
unsigned tamanhoHash;
int main()
{
unsigned quantidadeTestes;
NoLista *noAtual;
int quantidadeElementos, contador, elementoTemporario;
scanf("%u", &quantidadeTestes);
while (quantidadeTestes--)
{
scanf("%u %d", &tamanhoHash, &quantidadeElementos);
ListaEncadeada tabelaHash[tamanhoHash];
for (contador = 0; contador < tamanhoHash; ++contador)
{
tabelaHash[contador].primeiro = NULL;
tabelaHash[contador].ultimo = NULL;
}
for (contador = 0; contador < quantidadeElementos; ++contador)
{
scanf("%d", &elementoTemporario);
inserir_na_hash(tabelaHash, elementoTemporario);
}
for (contador = 0; contador < tamanhoHash; ++contador)
{
printf("%d -> ", contador);
for (noAtual = tabelaHash[contador].primeiro; noAtual; noAtual = noAtual->proximo)
printf("%d -> ", noAtual->valor);
printf("\\");
printf("\n");
}
if (quantidadeTestes)
printf("\n");
}
return 0;
}
void inserir_na_hash(ListaEncadeada *tabelaHash, const int chave)
{
NoLista *novoNo;
novoNo = (NoLista *) malloc(sizeof(NoLista));
if(!novoNo)
exit(1);
int indice = chave % tamanhoHash;
if (tabelaHash[indice].primeiro)
tabelaHash[indice].ultimo->proximo = novoNo;
else
tabelaHash[indice].primeiro = novoNo;
tabelaHash[indice].ultimo = novoNo;
novoNo->proximo = NULL;
novoNo->valor = chave;
}