Este documento descreve listas duplamente encadeadas, incluindo sua estrutura de nós com ponteiros para frente e para trás, e como implementar operações como busca, inserção e remoção nestas listas.
2. Lista Duplamente Encadeada
É um tipo de lista encadeada que pode ser vazia ou que pode ter
um ou mais nós, sendo que cada nó possui dois ponteiros: um que
aponta para o nó anterior e outro que aponta para o próximo nó.
O importante é que, neste tipo de lista, o ponteiro externo pode apontar
para qualquer nó da lista, pois é possível caminhar para a direita ou para
a esquerda com igual facilidade.
No
Ponteiro Anterior.
Ponteiro Próximo.
3. Lista Duplamente Encadeada
No1 No 2 No 3 No 4
Em uma lista duplamente
encadeada é possível
percorrer a lista em ambas
as direções.
Também apresenta uma
maior segurança do que
uma lista simplesmente
encadeada uma vez que,
existe sempre dois ponteiros
apontando para cada registro.
4. Implementando:
Struct Tpreg{
char nome[25];
void *ant,*depois;
};
typedef struct Tpreg registro;
registro *Auxiliar,*Anterior, *Atual,*Proximo;
Auxiliar = Inicio = Fim = Anterior = NULL;
registro* busca(){
char nomeE[];
int achou = 0;
scanf("%s", nomeE);
Anterior = Atual->ant;
while(Atual != NULL && achou == 0){
if(strcmp( nomeE,Atual->nome)==0){
achou = 1;
}else{
if(strcmp( nomeE,Atual- >nome)>0){
Atual = Anterior;
Anterior = Atual->ant;
}else{
Atual=Atual->prox;
Anterior = Atual->ant;
}
}
}
return Atual; }
Custo da busca total:
O(n) pois a busca é do
tipo sequencial.
8. Remoção
No (n-3)
Nome
“C”
No (n-2)
Nome
“C#”
No (n-1)
Nome
“C++”
Deletado
Nome
“Java”
No n
Nome
“...”
void remover(){
Atual = Busca();
if(Atual ->ant ==NULL)
Proximo = Atual->prox;
free(Atual);
Proximo->ant = NULL;
}else{
if(Atual->prox==NULL){
Anterior = Atual->ant;
free(Atual);
Anterior->prox =NULL;
}
else{
Anterior = Atual->ant;
Anterior ->prox = Atual->prox;
Proximo = Atual->prox;
Proximo->ant = Anterior;
free(Atual);
}
9. Lista Sequencial Duplamente encadeada
Uma Lista Sequencial Duplamente encadeada implementada em vetores, em
que uma coluna indica qual o dado anterior e outra coluna que indica qual é o
proximo e a posição é o índice.
12. Fonte:
●
Szwarcfiter, J. L.; Markenzon, L. ESTRUTURA DE DADOS E SEUS ALGORITMOS. 3ª ed.
Rio de Janeiro: LTC, 2010. 318 p.
●
Celes, Waldemar et al. INTRODUÇÃO A ESTRUTURA DE DADOS: COM TÉCNICAS DE
PROGRAMAÇÃO EM C. 2ª ed. Rio de Janeiro: Elsevier, 2004. 410 p.