+ All Categories
Home > Documents > Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H....

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H....

Date post: 16-Apr-2015
Category:
Upload: internet
View: 104 times
Download: 1 times
Share this document with a friend
Popular Tags:
45
Pearson Education Slide 1
Transcript
Page 1: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados.

Pearson Education Slide 1

Eliana e Fabio
Parei no slide 32
Page 2: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados.

Pearson Education Slide 2

Capítulo 17

Criado por Frederick H. Colclough, Colorado Technical University

Estruturas de Dados Ligadas

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

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

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

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

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

Pearson Education Slide 5

Abordagens Três formas de lidar com estruturas

comoessas:

1- Abordagem estilo C: funções globais estructs com tudo público

2- Classes com variáveis-membro privadas eempregar 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

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

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 ouclasse que é dinamicamente criada com o

operdador new Nós também contêm ponteiros para outros nós Fornecem ‘ligações’

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

Pearson Education Slide 7

Nós e PonteirosPainel 17.1página 482

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

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 1o, uma vez que é usada em

typedef

Observe também a ‘circularidade’

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

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

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

Pearson Education Slide 10

Exemplo de Acesso ao Nó

(*cabeca).contagem = 12; Fixa o membro contagem do nó apontado

porcabeca 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

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

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 como que nós usamos em vetores parcialmente

preenchidos

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

Pearson Education Slide 12

Acessando Dados nos NósPainel 17.2

página 484

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

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

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

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;

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

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

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

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

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

Pearson Education Slide 17

Adicionando um Nó à Cabeça de uma Lista Ligada

Painel 17.3

página 487

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

Pearson Education Slide 18

Armadilha: Nós PerdidosPainel 17.5 página 489

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

Pearson Education Slide 19

Inserindo no Meio de uma Lista Ligada

Painel 17.6

página 490

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

Pearson Education Slide 20

Removendo um NóPainel 17.7

página 491

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

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

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

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;

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

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

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

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

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

Pearson Education Slide 25

Uma Pilha: GráficoPainel 17.12 página 499

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

Pearson Education Slide 26

Interface para uma Classe Template Pilha

Painel 17.13página 500

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

Pearson Education Slide 27

Programa usando a Classe Template Pilha

Painel 17.14 página 501

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

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

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

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

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

Pearson Education Slide 30

Interface para uma Classe Template Fila

Painel 17.16

páginas 504-505

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

Pearson Education Slide 31

Programa utilizando Classe Template Fila

Painel 17.17

página 505

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

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

diretamentedisponíveis para as funções-membros classe fila!

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

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 outraclasse fila; //Declaração antecipada.

Avisa que a ‘classe fila existirá’

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

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

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

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

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

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 1o item na estruturaend(): retorna um iterador para testar se chegou ao final

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

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.

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

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

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

Pearson Education Slide 39

Árvore BináriaPainel 17.23página 516

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

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)

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

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

Para busca, especialmente!

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

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 Ordem1. Processar a subárvore esquerda.2. Processar os dados no nó-raiz.3. Processar a subárvore direita.

Processamento de Ordem Posterior1. Processar a subárvore esquerda.2. Processar a subárvore direita.3. Processar os dados no nó-raiz.

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

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’

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

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

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

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


Recommended