O trecho do algoritmo abaixo é o de busca e inserção
em lista encadeada ordenada.
Quando consideramos uma lista circular encadeada, podemos utilizar
um registro auxiliar, como indicado no algoritmo de busca abaixo:
Observação: Este, assim como os demais algoritmos de busca apresentados até o momento, supõe que o campo de informação do nó (tipo T) é 'ordenável', isto é, pode ser comparado com um outro componente do mesmo tipo por expresões (<,<,=,<=,>=); ou então, que existe um campo de chave que pode ser comparado. Isso não é de fato implementado assim.
-> De acodo com a dicussão sobre esse assunto em sala de aula, responda: Qual é alternativa para campos "não ordenáveis". Implemente a alternativa como exercício.
{ Busca em uma lista circular encadeada ordenada com sentinela.
O sentinela é o primeiro elemento da lista circular apontado por ptlista }
Procedure busc_circ (ptlista: Lista; x: T ; Var p,pa:Lista);
Var ant, pont: Lista;
Begin
ant:=ptlista; {sentinela}
ptlista^.info = x;
pont:=ptlista^.lig; {primeiro elemento}
While pont^.info < x do
Begin
ant:=pont;
pont:=pont^.lig;
End;
If pont^.info = x and (pont<>ptlista) then
{elemento já existe,
devolver os ponteiros necessários para eliminação}<- Completar como exercício
Else
{elemento não existe,
devolver os ponteiro necessários para inserção} <- Completar como exercício End;
-> Desenvolver o TAD Lista Ordenada e implementar os demais algoritmos de lista
para ele, supondo organização circular simplesmente encadeada e duplamente encadeada.