Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Introdução
A gente não conseguiu os ganhos de eficiência que a gente esperava com as listas encadeadas.
Mesmo a busca na lista ordenada — (que executa em tempo O(log n) nos vetores)
E agora?
Quer dizer, tem uma observação muito legal que nós podemos fazer sobre as listas encadeadas
• • • ... •
E daı́ a gente pode utilizar estratégias recursivas para trabalhar com listas encadeadas.
Por exemplo, imagine que nós queremos imprimir uma lista encadeada.
Imprime ( p->val )
Imprime-Rec ( p->prox )
}
1
2 Algoritmos recursivos para listas encadeadas
Certo.
Agora imagine que nós queremos imprimir a lista na ordem contrária — (i.e., começando com o
último e terminando no primeiro)
Quer dizer, primeiro nós imprimimos do último até o segundo, e depois nós imprimimos o
primeiro elemento.
Imprime-contrario-Rec ( p->prox )
Imprime ( p->val )
}
Só isso!
Exemplos
a. Busca
p −→ 7 • 3 • 18 • ... 5 •
E imagine que nós queremos saber se o número k está nessa lista ou não.
A estratégia recursiva de busca é a seguinte
2
Algoritmo Busca-Rec (p,k)
{
Se ( p = Nulo ) { Imprime ("N~
ao está lá!")
Retorna
}
Busca-Rec ( p->prox, k )
}
b. A soma dos elementos
p −→ 7 • 3 • 18 • ... 5 •
Retorna (soma)
}
c. O k-ésimo elemento
p −→ 7 • 3 • 18 • ... 5 •
3
. caso k = 1, nós imprimimos o primeiro elemento da lista
. ao, nós imprimimos o (k − 1)-ésimo elemento do restante da lista
sen~
Se ( k = 1 ) Imprime ( p->val );
Sen~
ao Imprime-elem (p->prox, k-1)
}
d. Inserção no fim da lista
p −→ 7 • 3 • 18 • ... 5 •
Retorna(aux);
}
p->prox <-- Insere-final-Rec (p->prox, k)
Retorna (p)
}
(Note que esse algoritmo retorna um ponteiro para a lista com o novo elemento no final.)
4
e. Inserção na lista ordenada
p −→ 3 • 5 • 7 • ... 18 •
Retorna(aux);
}
p->prox <-- Insere-ordenada-Rec (p->prox, k)
Retorna (p)
}
f. Remoção
p −→ 7 • 3 • 18 • ... 5 •
5
A coisa fica assim
Algoritmo Remoç~
ao-Rec (p,k)
{
Se ( p = Nulo ) Retorna
Se ( p->val = k )
{
Retorna( p->prox );
}
Sen~
ao
{
p->prox <-- Remoç~ao-Rec (p->prox, k)
Retorna (p)
}
}