Bom, eu preciso fazer uma tabela hash de 100 elementos como mostrado no esquema:
essa tabela (vetor) de 100 elementos … cada um deles possuem números chamados de “chaves” e um ponteiro apontando para o a próxima chave (lista encadeada).
A regra que deve ser seguida para as inserções no vetor, é que o ultimo digito da chave é seu “endereço”, e esse endereço indica qual posição do vetor eu devo inserir.
Ex: Inserir a chave 487
(chave) 487 % (tamanho do vetor) 100 = 7
Então devo inserir a chave 487 na posição 87 do vetor: v[87] = 487
Porém eu estou tendo problemas com os ponteiros para chamar as funções e utiliza-los… Eu sei fazer uma lista encadeada, porém não sei como fazer um vetor disso…
Esse é um pouco do que eu fiz quando era só uma lista encadeada…
struct dados
{
int chave;
struct dados *prox;
};
typedef struct dados Lista;
void Cria(Lista **L)
{
*L = NULL;
}
void Inserir(Lista **L, int v)
{
Lista *p, *q;
p = (Lista*)calloc(1, sizeof(Lista));
p->chave = v;
p->prox = NULL;
if(*L == NULL)
{
*L = p;
}
else
{
q = *L;
while(q->prox != NULL)
{
q = q->prox;
};
q->prox = p;
}
}
Eu conversei com um amigo e ele me indicou fazer a declaração da struct dessa forma:
struct dados
{
int chave;
struct dados * prox;
} tabela[100];
typedef struct dados Elemento;
Entretanto eu não tenho ideia de como eu vou chamar isso na função… Porque o vetor vai estar na main()… e eu só vou chamar a função “Inserir” com o vetor e o valor para inserir
Como eu chamaria essa função ? Inserir(???,int chave)
Se alguém puder me dar uma luz, eu agradeço demais … Preciso fazer varias coisas alem da inserção, mas não consigo porque eu não sei de que forma eu vou chamar o vetor