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

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

TADS – Tipos Abstratos de Dados

Apresentações semelhantes


Apresentação em tema: "TADS – Tipos Abstratos de Dados"— Transcrição da apresentação:

1 TADS – Tipos Abstratos de Dados
Listas Encadeadas: Listas simplesmente encadeadas: cada nó aponta apenas para o próximo. Listas duplamente encadeadas: cada nó aponta para o próximo e também para o anterior.

2 Motivação para uso da lista encadeada: desvantagens do uso de vetor
Tamanho máximo fixo Mesmo vazias ocupam espaço grande de memória Um vetor de ponteiros ameniza o desperdício de memória, mas, desperdiça a memória dos ponteiros não usados. Operações podem envolver muitos deslocamentos de dados: Inclusão em uma posição ou no início Exclusão em uma posição ou no início

3 Listas simplemente encadeadas
São listas onde cada elemento está armazenado em um TAD chamado elemento de lista. Cada elemento da lista referencia o próximo que só é alocado quando necessário de forma dinamica Para referenciar o primeiro elemento utiliza-se um TAD cabeça de lista.

4 Listas simplemente encadeadas
São listas onde cada elemento está armazenado em um TAD chamado elemento de lista. Cada elemento da lista referencia o próximo que só é alocado quando necessário de forma dinamica Para referenciar o primeiro elemento utiliza-se um TAD cabeça de lista.

5 Exemplo: Cabeça de lista 5 Elemento de Lista melão maçã uva qtde dados
info próximo info próximo info próximo melão maçã uva Elemento de Lista

6 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; };

7 Modelagem do Elemento da Lista
Necessidade: Um ponteiro para o próximo elemento da lista. Um campo do tipo da informação que vamos armazenar. Código: struct Elemento { struct Elemento *prox; tipo_desejado info; };

8 Modelagem do Elemento da Lista (versão 2)
struct Elemento { Elemento *proximo; TipoInfo *info; }; struct TipoInfo { tipo-do-campo1 campo1; tipo-do-campo2 campo2; tipo-do-campoN campoN; } info como ponteiro torna os algoritmos mais genéricos. Com o uso do typedef generaliza-se ainda mais.

9 Elemento de Informação (TipoInfo)
Para tornar todos os algoritmos da lista mais genéricos, usa-se o campo info como um ponteiro para um elemento de informação. qtde dados 3 info próximo info próximo info próximo melão maçã uva doce azeda irkh caro cara barata Elemento de Informação (TipoInfo)

10 Algumas funcionalidades básicas:
Criar lista. Colocar e retirar dados da lista. Realizar testes sobre a lista: se vazia, se contém elemento etc. Destruir uma lista. 3 melão doce caro maçã azeda cara uva irkh barata

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

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

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

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

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

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

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

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

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

20 Modelagem do Tipo Info Para inserção em ordem e para localizar um determinado elemento são necessárias funções para comparar as informações associadas aos elementos Estas operações de comparação fazem parte do TAD TipoInfo e não da Lista. Sugestões: igual(dado1,dado2): 0 se igual, 1 se diferente maior(dado1,dado2): 0 se maior, 1 se menor ou igual maior(dado1,dado2): 0 se menor, 1 se maior ou igual compara(dado1,dado2): 0 se igual, >0 se maior, <0 se menor

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


Carregar ppt "TADS – Tipos Abstratos de Dados"

Apresentações semelhantes


Anúncios Google