Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.