A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Listas duplamente encadeadas

Apresentações semelhantes


Apresentação em tema: "Listas duplamente encadeadas"— Transcrição da apresentação:

1 Listas duplamente encadeadas
Cada elemento da lista referencia o anterior e também próximo. Permite o deslocamento em ambos os sentidos. Útil para representar conjunto de objetos que devem ser percorridos nos dois sentidos. Exemplos de uso: representação de intinerários de meios de transporte, realização de busca aproximada.

2 Exemplo 3 melão maçã uva doce azeda irkh caro cara barata lista
qtde dados 3 ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh caro cara barata

3 Modelagem da Cabeça da Lista
Necessidade: Um inteiro para indicar a qtde de elementos da lista. Um ponteiro para o primeiro elemento da lista. Código: struct Lista { int qtde; struct Elemento *dados; };

4 Modelagem do Elemento da Lista
Necessidade: Um ponteiro para o elemento anterior. Um ponteiro para o próximo elemento. Um ponteiro para o tipo tipo da informação a ser armazenada. Código: struct Elemento { struct Elemento *ant; struct Elemento *prox; tipo_desejado info; };

5 Algoritmo: adicionaInicio
lista qtde dados 2 ant info prox ant info prox maçã uva azeda irkh cara barata

6 Algoritmo: adicionaInicio
lista qtde dados 2 ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) {

7 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo;

8 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento));

9 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta;

10 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados;

11 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados; lista->dados->ant = novo;

12 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados; lista->dados->ant = novo; novo->ant = NULL;

13 Algoritmo: adicionaInicio
lista qtde dados 2 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados; lista->dados->ant = novo; novo->ant = NULL; lista->dados = novo;

14 Algoritmo: adicionaInicio
lista qtde dados 3 novo ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados; lista->dados->ant = novo; novo->ant = NULL; lista->dados = novo; lista->qtde++;

15 Algoritmo: adicionaInicio
lista qtde dados 3 ant info prox ant info prox ant info prox melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados; lista->dados->ant = novo; novo->ant = NULL; lista->dados = novo; lista->qtde++; return 0;

16 Algoritmo: adicionaInicio (considerando a possibilidade de lista vazia)
qtde dados

17 Algoritmo: adicionaInicio (considerando a possibilidade de lista vazia)
qtde dados novo ant info prox melão doce fruta caro

18 Algoritmo: adicionaInicio (considerando a possibilidade de lista vazia)
qtde dados int adicionaInicio(struct ListaD *lista, struct Fruta *fruta) { struct Elemento *novo; novo = (struct Elemento*) malloc(sizeof(struct Elemento)); novo->info = fruta; novo->prox = lista->dados; if(lista->qtde > 0) lista->dados->ant = novo; novo->ant = NULL; lista->dados = novo; lista->qtde++; return 0; } novo ant info prox melão doce fruta caro

19 Exemplos e exercícios no documento cooperativo
disponível no site


Carregar ppt "Listas duplamente encadeadas"

Apresentações semelhantes


Anúncios Google