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

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

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados.

Apresentações semelhantes


Apresentação em tema: "Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados."— Transcrição da apresentação:

1 Pearson Education Slide 1

2 Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados Ligadas

3 Pearson Education Slide 3 Objetivos de Estudo Nós e Listas Ligadas Criando e buscando Aplicações de Listas Ligadas Pilhas e Filas Classes Amigas e Alternativas Similares Iteradores Ponteiros como iteradores Árvores

4 Pearson Education Slide 4 Introdução Listas Ligadas Construídas com ponteiros Aumentam e diminuem durante a execução Árvore também usa ponteiros Estruturas semelhantes a ponteiros Usam variáveis dinâmicas Standard Template Library Tem versões predefinidas de algumas estruturas

5 Pearson Education Slide 5 Abordagens Três formas de lidar com estruturas como essas: 1- Abordagem estilo C: funções globais e structs com tudo público 2- Classes com variáveis-membro privadas e empregar funções accessor e mutator 3- Classes amigas Listas ligadas usarão o método 1 Pilhas e filas usarão o método 2 Árvores, o método 3

6 Pearson Education Slide 6 Nós e Listas Ligadas Listas ligadas Exemplo simples de uma estrutura de dados dinâmica Compostas de nós Cada nó é uma variável do tipo struct ou classe que é dinamicamente criada com o operdador new Nós também contêm ponteiros para outros nós Fornecem ligações

7 Pearson Education Slide 7 Nós e Ponteiros Painel 17.1 página 482

8 Pearson Education Slide 8 Definição de Nó struct NoDaLista { string item; int contagem; NoDaLista *link; }; typedef NoDaLista* NoDaListaPtr; A ordem aqui é importante! NoDaLista é definido 1 o, uma vez que é usada em typedef Observe também a circularidade

9 Pearson Education Slide 9 Ponteiro Cabeça Caixa rotulada como cabeça não é um nó: NoDaListaPtr cabeca; Um ponteiro simples para um nó Aponta para o primeiro nó na lista Cabeça é usada para manter o início da lista Também é usada como argumento para Funções

10 Pearson Education Slide 10 Exemplo de Acesso ao Nó (*cabeca).contagem = 12; Fixa o membro contagem do nó apontado por cabeca em 12 Operador alternativo, -> Chamado operador seta Notação simplificada que combina * e. cabeca->contador = 12; Idêntico ao exemplo acima cin >> cabeca->item Atribui a string completa ao membro item

11 Pearson Education Slide 11 Marcador de Final Use NULL para marcar o final Considerado sentinela para nós Indica que nenhuma ligação virá depois desse nó Fornece um marcador de final parecido com o que nós usamos em vetores parcialmente preenchidos

12 Pearson Education Slide 12 Acessando Dados nos Nós Painel 17.2 página 484

13 Pearson Education Slide 13 Listas Ligadas Listas como as mostradas são chamadas de Listas ligadas O primeiro nó é chamado Cabeça Apontada por um ponteiro chamado cabeça O último nó também é especial Sua variável membro ponteiro é NULL Teste simples para o final da lista ligada

14 Pearson Education Slide 14 Definição da Classe Listas ligadas class NoInt { public: NoInt( ){} NoInt(int osDados, NoInt* oLink) : dados(osDados), link(oLink){} NoInt* getLink( ) const { return link; } int getDado( ) const { return dados; } void setDado(int osDados) { dados = osDados; } void setLink(NoInt* ponteiro) { link = ponteiro; } private: int dados; NoInt *link; }; typedef NoInt* NoIntPtr;

15 Pearson Education Slide 15 Classe Listas ligadas Note que todas as definições de funções- membro são lineares Pequenas e simples o suficiente Obeserve o construtor de dois parâmetros Permite a criação de nós com um determinado inteiro como dado e com um membro link específico Exemplo: NoIntPtr p2 = new NoInt(42, p1);

16 Pearson Education Slide 16 Crriando o Primeiro Nó NoIntPtr cabeca; Declara a variável ponteiro cabeca cabeca = new NoInt; Aloca dinamicamente o novo nó Nosso 1 o nó na lista, é atribuído a cabeca cabeca->setDado(3); cabeca->setLink(NULL); Damos valores às variáveis-membros desse novo nó O membro ponteiro é fixado como igual a NULL, pois ele é o último e também o primeiro

17 Pearson Education Slide 17 Adicionando um Nó à Cabeça de uma Lista Ligada Painel 17.3 página 487

18 Pearson Education Slide 18 Armadilha: Nós Perdidos Painel 17.5 página 489

19 Pearson Education Slide 19 Inserindo no Meio de uma Lista Ligada Painel 17.6 página 490

20 Pearson Education Slide 20 Removendo um Nó Painel 17.7 página 491

21 Pearson Education Slide 21 Busca em uma Lista Ligada Função com dois argumentos: NoIntPtr busca(NoIntPtr cabeca, int alvo); //Pré-condição: o ponteiro cabeca aponta para a cabeça de uma //lista ligada. A variável ponteiro no último nó é NULL. //Se a lista estiver vazia, cabeca é NULL. //Retorna um ponteiro que aponta para o primeiro nó que contenha o //alvo. Se nenhum nó contiver o alvo, a função retorna NULL. Passagem simples da lista Semelhante a percorrer um vetor

22 Pearson Education Slide 22 Pseudocódigo Para Função Busca while (aqui não está apontando para um nó contendo alvo e aqui não está apontando para o último nó) { Faz aqui apontar para o próximo nó na lista. } if (o nó apontado por aqui contém alvo) return aqui; else return NULL;

23 Pearson Education Slide 23 Algorítmo Para Função Busca while (aqui–>getDado( ) != alvo && aqui–>getLink( ) != NULL) aqui = aqui–>getLink( ); if (aqui–>getDado( ) == alvo) return aqui; else return NULL; Deve-se fazer um caso especial para listas vazias Não usado aqui

24 Pearson Education Slide 24 Pilhas Estrutura de dados Pilha: Acessa dados na ordem inversa em que foram armazenados LIFO – last-in/first-out (primeiro a entrar/último a sair) Pense na pilha como um buraco no chão As pilhas são usadas para muitas tarefas: Controle de chamadas de função em C++ Gerenciamento de memória Nosso uso: Uso em listas ligadas para implementar pilhas

25 Pearson Education Slide 25 Uma Pilha: Gráfico Painel 17.12 página 499

26 Pearson Education Slide 26 Interface para uma Classe Template Pilha Painel 17.13 página 500

27 Pearson Education Slide 27 Programa usando a Classe Template Pilha Painel 17.14 página 501

28 Pearson Education Slide 28 Pilha: Push ( empurrar ) e Pop ( Saltar para fora ) Acrescente dados à pilha push Empurrando os dados para pilha Lembre-se: Vai para o topo da pilha Removendo dados da pilha pop Saltando para fora da pilha Lembre-se: removido do topo da pilha

29 Pearson Education Slide 29 Filas Outra estrutura de dados comum: Lida com os dados no modo first-in/first-out (FIFO) (primeiro a entrar é o primeiro a sair) Os itens são inseridos no final da lista E removidos na frente Representação de uma típica formação em linha Como as filas de um cinema

30 Pearson Education Slide 30 Interface para uma Classe Template Fila Painel 17.16 páginas 504-505

31 Pearson Education Slide 31 Programa utilizando Classe Template Fila Painel 17.17 página 505

32 Pearson Education Slide 32 Classes Amigas Lembre-se do uso constante das funções de acesso getlink e setlink Talvez você tenha achado muito chato Semelhante a tornar os dados públicos?! Público torna-se disponível para TODOS! Use Classes Amigas Torne a classe template fila amiga da classe template nó Todos os membros privados tornam-se diretamente disponíveis para as funções-membros classe fila!

33 Pearson Education Slide 33 Declaração Antecipada O relacionamento de classes requer que uma faça referência à outra Apresenta o problema Como pode-se declarar ambas ao mesmo tempo? Requerem declaraçao antecipada Um simples cabeçalho de classe dentro da outra classe fila; //Declaração antecipada. Avisa que a classe fila existirá

34 Pearson Education Slide 34 Iteradores Construção que permite percorrer em ciclos os dados Como uma passagem Permite qualquer ação desejada sobre os dados Ponteiros são geralmente usados como iteradores Vistos na implementação de listas ligadas

35 Pearson Education Slide 35 Ponteiros como Iteradores Lembre-se: Listas ligadas: Estrutura de dados prototípica Ponteiros: exemplo prototípico de iterador Usados como um iteradores, percorrendo a lista ligada, um nó de cada vez, a começar da cabeça da lista: Exemplo: Tipo_No *iterador; for (iterador = Cabeca; iterador != NULL; iterador=iterador->Link) Execute_a_Ação

36 Pearson Education Slide 36 Classes Iteradoras Mais versátil que ponteiros Possui operadores sobrecarregados: ++ Move o iterador para o próximo item -- Move o iterador para o item anterior ==Compara iteradores !=Compara para não-iguais *Acessa um item Classe de estrutura de dados deve ter membros: begin(): retorna um iterador para o 1 o item na estrutura end(): retorna um iterador para testar se chegou ao final

37 Pearson Education Slide 37 Exemplo de Classe Iteradora Utilizando um iterador, você pode percorrer em ciclos os itens em uma estrutura de dados ed, da seguinte forma: for (i = ed.begin( ); i != ed.end( ); i++) processe *i //*i é o item dado atual.

38 Pearson Education Slide 38 Árvores: Introdução Árvores podem ser complexas estruturas de dados Somente veremos aqui os fundamentos: Construindo e manipulando Usando nós e ponteiros Lembre-se das listas ligadas: nós, têm somente um ponteiro aponta para o próximo nó Árvores têm dois, e as vezes mais ponteiros para outros nós

39 Pearson Education Slide 39 Árvore Binária Painel 17.23 página 516

40 Pearson Education Slide 40 Proriedades das árvores Observe os caminhos A partir do topo para qualquer nó Nenhum ciclo – siga os ponteiros, e alcançará o final Obeserve que cada nó possui dois links Chamada árvore binária É o tipo mais comum de árvore Nó-raiz Similar a cabeca nas listas ligadas Nós-folhas Ambas as variáveis link são NULL (nenhuma subárvore)

41 Pearson Education Slide 41 Árvores e Recursão Observe que uma árvore apresenta estrutura recursiva Cada árvore possui duas subárvores Cada subárvore possui outras duas subárvores Etc., etc. Torna as árvores adaptáveis a algorítmos recursivos Para busca, especialmente!

42 Pearson Education Slide 42 Árvore: Processamento Processamento de Ordem Anterior 1. Processar os dados no nó-raiz. 2. Processar a subárvore esquerda. 3. Processar a subárvore direita. Processamento em Ordem 1. Processar a subárvore esquerda. 2. Processar os dados no nó-raiz. 3. Processar a subárvore direita. Processamento de Ordem Posterior 1. Processar a subárvore esquerda. 2. Processar a subárvore direita. 3. Processar os dados no nó-raiz.

43 Pearson Education Slide 43 Regras de Armazenamento da Árvore Nosso exemplo armazenou valores de uma maneira especial: Regra de Armazenamento da Árvore de Busca Binária: 1- Valores na subárvore da esquerda são menores que o valor na raiz 2 - Valores na subárvore da direita são maiores que o valor na raiz 3- Regras se aplicam recursivamente à cada subárvore Árvores usando esse mecanismo de armazenamento: Chamadas Árvores de Busca Binária (ABB) Passagens: Em ordem valores em ordem Ordem anterior notação prefixo Ordem posterior notação sufixo

44 Pearson Education Slide 44 Sumário 1 Nó é um struct ou objeto de classe Um ou mais membros são ponteiros Nós podem ser conectados por ponteiros Poduzem estruturas que podem aumentar e dimi- nuir de tamanho em tempo de execução Listas ligadas Listas de nós, onde cada nó aponta para o próximo O final das listas ligadas são marcados com um ponteiro NULL

45 Pearson Education Slide 45 Sumário 2 Pilhas são estrututas de dados LIFO Filas são estruturas de dados FIFO Iterador é uma construção que permite percorrer em ciclos os dados Estrutura de dados árvore Nós possuem dois ou mais ponteiros Cada um apontando para outro nó/subárvore Árvore de Busca Binária Regras especiais de armazenamento que permitem buscas rápidas


Carregar ppt "Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados."

Apresentações semelhantes


Anúncios Google