Lista duplamente encadeada

383 palavras 2 páginas
Estrutura de Dados
Listas duplamente encadeadas

Prof. Luciano Z. Wolski

Lista duplamente encadeada
Cada elemento tem um ponteiro para o próximo elemento e um ponteiro para o elemento anterior.
Dado um elemento podemos acessar ambos elementos adjascentes: o próximo e o anterior.
Se tivermos um ponteiro para o último elemento da lista, podemos percorrer a lista em ordem inversa. Basta acessar o elemento anterior até chegar ao primeiro elemento da lista, que não tem elemento anterior, o ponteiro do elemento anterior vale NULL.

Estruturação Lista duplamente encadeada

P

/

...

/

Representação do nodo
Para exemplificar a implementação de listas duplamente encadeadas, vamos utilizar um exemplo simples onde vamos armazenar valores inteiros. typedef struct cel celula; struct cel{ int dado; struct cel *prox; struct cel *ant;
};

Inicializa p = malloc (sizeof (celula)); p->ant = NULL; p->prox = NULL;

Função de inserção /* Insere no inicio da lista*/
/* O ponteiro 'p' é a cabeça da lista*/ void insereInicio(int x, celula *p)
{
celula *nova, *q; nova = malloc (sizeof (celula)); nova->dado = x; nova->prox = p->prox; if (p->prox != NULL)
{
q = nova->prox; q->ant = nova;
}
p->prox = nova; nova->ant = p;
}

Função de inserção /* Insere no último da lista*/ void insereUltimo(int x, celula *p)
{
celula *q, *nova; nova = malloc (sizeof (celula)); nova->dado = x; q = p; while (q->prox != NULL) q = q->prox; q->prox = nova; nova->ant = q; nova->prox = NULL;
}

Função remove void buscaEremove (int y, celula *p)
{
celula *w, *q; w = p; q = p->prox; while (q != NULL && q->dado != y) { w = q; q = q->prox;
}
if (q != NULL) { w->prox = q->prox; q->prox->ant = w; free (q);
}
}

Função remove
Exemplo – Função para retirar um elemento da lista, um ponteiro apenas q aponta para o elemento no meio da lista:
- o anterior passa a apontar para o próximo: q->ant->prox = q->prox
- o próximo passa a apontar para o anterior: q->prox->ant = q->ant
Se q aponta para o último elemento
- não é

Relacionados

  • Lista duplamente encadeada
    476 palavras | 2 páginas
  • lista duplamente encadeada
    448 palavras | 2 páginas
  • Listas Duplamente Encadeadas C++
    492 palavras | 2 páginas
  • Lista Duplamente Encadeada 10254 Ltxpo8
    3743 palavras | 15 páginas
  • Resolvendo exercicio de Lista Duplamente Encadeada
    631 palavras | 3 páginas
  • Código em Linguagem C para uma lista duplamente encadeada
    814 palavras | 4 páginas
  • Cadastro de users apartir de tecnica com lista duplamente encadeada
    967 palavras | 4 páginas
  • sadasdas
    1421 palavras | 6 páginas
  • Adelina
    1475 palavras | 6 páginas
  • Estrutura de dados
    1447 palavras | 6 páginas