Você está na página 1de 2

[EXERCICIO 9 - LISTA 1]

[entrada]:
T - Hashtable
x - valor a ser buscado

[saida]:
se o valor está na tabela, retorna o nó anterior ao nó que contém o valor
achado, caso contrário retorna λ

procedimento buscar(T, x)
{
index = h(x)
node_ptr = T[index].head
prev_node = λ

while (node_ptr != λ)
{
if (node_ptr->value == x)
{
return prev_node
}

prev_node = node_ptr
node_ptr = node_ptr->next
}

return λ
}

// Obs: considere a função make_node(x) aloca um nó na memória e coloca o


// valor x dentro desse nó alocado
procedimento inserir(T, x)
{
index = h(x)
head = T[index].head
ptr = λ

// não tem nenhum elemento na lista encadeada


if (head == null)
{
head = make_node(x)
return;
}
else
{
ptr = buscar(T, x)
if (head->value == x || ptr != λ)
{
// o valor a ser inserido ja existe na tabela, entao apenas
saimos
// da função

return;
}
else
{
// aqui ptr é o ultimo nó da lista encadeada
ptr->next = make_node(x)
}
}
}

procedimento remover(T, x)
{
index = h(x)
head = T[index].head

if (head == null)
{
// o elemento não existe na tabela, assim sairemos da função
return;
}

if (head->value == x)
{
tmp = head->next;

// desalocamos a memoria
free(head);

// atualizamos o nó
head = tmp;
}
else
{
ptr = buscar(T, x)

// se o elemento existir
if (ptr != λ)
{
// o ptr aqui aponta para o nó anterior ao nó que contém o
elemento
// que queremos remover

target_node = ptr->next;
ptr->next = ptr->next->next;

// desalocamos a memoria
free(target_node)
}
}
}

Você também pode gostar