1 / 21

TADS – Tipos Abstratos de Dados

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. Motivação para uso da lista encadeada : desvantagens do uso de vetor.

devin
Télécharger la présentation

TADS – Tipos Abstratos de Dados

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Cabeça de lista Elemento de Lista Exemplo: qtde dados 5 info próximo info próximo info próximo melão maçã uva

  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

  10. 3 melão maçã uva doce azeda irkh caro cara barata 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.

  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 info prox info prox novo melão maçã uva doce azeda irkh fruta caro cara barata int adicionaInicio(struct Lista *lista, struct Fruta *fruta) { struct Elemento *novo;

  14. novo Algoritmo: adicionaInicio lista qtde dados 2 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. novo Algoritmo: adicionaInicio lista qtde dados 2 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. novo Algoritmo: adicionaInicio lista qtde dados 2 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. novo Algoritmo: adicionaInicio lista qtde dados 2 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. novo 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++;

  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 TADTipoInfo 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

More Related