TADS – Tipos Abstratos de Dados

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Motivação para listas duplamente encadeadas e circulares
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Listas duplamente encadeadas
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
Alocação Dinâmida de Memória
Listas duplamente encadeadas
Engenharia de Computação.
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Estruturas de Dados e Algoritmos
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Universidade de Brasília
Robson Godoi / Sandra Siebra
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
Alocação Dinâmica de Memória
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Algoritmos e Estruturas de Dados
Listas Simplesmente Encadeadas
ALGORITMOS E ESTRUTURAS DE DADOS
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Pesquisa em Memória Primária
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Alocação Dinâmica de Memória
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Listas lineares Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 5: Matrizes
Estruturas de Dados Aula 9: Listas (parte 1)
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Listas Simplesmente Encadeadas
Estruturas de Dados Aula 17: Estruturas Genéricas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Prof. Alessandro Gonçalves
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
INE5408 Estruturas de Dados Listas Encadeadas Simples.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Lista Ligada Estrutura de Dados II Prof. Gale. Vantagens  Crescem (ou decrescem) à medida que elementos são inseridos (ou removidos)  seqüência encadeada.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

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

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.

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.

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

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

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

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.

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)

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

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

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)

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;

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));

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;

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;

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;

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++;

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

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

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