Estruturas de Dados e Algoritmos

Slides:



Advertisements
Apresentações semelhantes
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Advertisements

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
Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Motivação para listas duplamente encadeadas e circulares
Marco Antonio Montebello Júnior
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Interação entre objetos
TADS – Tipos Abstratos de Dados
Gerenciamento de Arquivos, Páginas e Registros
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.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Árvores.
Arquivos Seqüenciais Inhaúma Neves Ferraz
Coleta de resíduos. Sumário Resíduos Coleta de resíduos Contador de referências Marcação e varredura Parada e cópia Marcação e compactação Gerenciamento.
Variáveis Dinâmicas Caixas de Nós
SSC SISTEMAS OPERACIONAIS I Aula 15 – Gerenciamento de Memória
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Listas Ligadas – Conceitos Avançados
Capítulo 6 Sistemas de Arquivos 6.1 Arquivos 6.2 Diretórios
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.
Instrutor: Nilo Menezes
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Robson Godoi / Sandra Siebra
Lista Encadeada Circular Lista Duplamente Encadeada
Programação Baseada em Objectos Desenho de TAD
Listas Encadeadas.
Revisão da Linguagem C.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Apontadores ou Ponteiros
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Árvores binárias de pesquisa com balanceamento
Linguagem de Programação II Parte IX
Denise Guliato Faculdade de Computação – UFU
Aula 11 LISTAS LIGADAS.
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
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.
Lista Encadeada Circular Lista Duplamente Encadeada
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estruturas de Dados com Jogos
Entendendo as definições de classe
Denise Guliato Faculdade de Computação – UFU
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Estruturas de Dados Aula 9: Listas (parte 1)
Ambiente de Execução - Rotinas
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados Aula 11: TAD Pilha
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
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 I Segundo Período de 2008 Gabarito da Primeira Prova.
Aula Prática 12 Listas Encadeadas Monitoria
Estruturas de Dados Murilo Salgado Razoli.
Estrutura de Dados Aula 3 - Listas
INE5408 Estruturas de Dados Listas Encadeadas Simples.
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:

Estruturas de Dados e Algoritmos Listas Ligadas Estruturas de Dados e Algoritmos 26/03/2017 Fábio Lopes Caversan

Listas Ligadas Desvantagens do armazenamento seqüencial para representar pilhas e filas: Subdimensionamento ou superdimensionamento da memória devido a alocação fixa de uma certa quantidade de memória antes da execução do programa Possibilidade de overflow 26/03/2017 Fábio Lopes Caversan

Compartilhando a memória disponível Suponha uma implementação seqüencial de pilhas Stack x,y,z; Suponha que sejam inicializadas, de forma estática, com 50 elementos x,y,z terão, durante a utilização, respectivamente, no máximo, 20, 10 e 70 elementos 26/03/2017 Fábio Lopes Caversan

Fazendo cálculos 100 células seriam necessárias Porém, na inicialização, deve-se usar o tamanho 70 para não ocorrer um overflow Então, temos 3* 70 = 210,quando somente 100 serão utilizadas Que tal evitar esse desperdício através de um gerenciador de memória? Ele controlaria quem recebe mais ou menos células de memória 26/03/2017 Fábio Lopes Caversan

Agrupando as células livres num banco de memória livre Banco de memória Variáveis x y z nada nada nada 26/03/2017 Fábio Lopes Caversan

Operação Banco de memória x y z x.Push(a) (nada) (nada) y.Push(b) (nada) y.Push(c) (nada) x.Push(d) (nada) z.Push(e) (nada) 26/03/2017 Fábio Lopes Caversan

Operação Banco de memória x y z z.Push(f) (nada) y.Pop() z.Pop() (nada) x.Pop() (nada) z.Push(g) 26/03/2017 Fábio Lopes Caversan

Considerações importantes A ordem das células de memória disponíveis no banco, no decorrer da execução da aplicação, muda substancialmente O importante é manter um controle sobre a ordem lógica das células de memória e não, necessariamente, sobre a ordem física 26/03/2017 Fábio Lopes Caversan

Lista Ligada (Encadeada) Linear Cada item na lista é um nó Todo nó contem dois campos: o de informação e do endereço seguinte Campo de informação: armazena o real elemento da lista Campo de endereço: endereço do próximo nó na lista. É um ponteiro! 26/03/2017 Fábio Lopes Caversan

Algumas representações do nó ... Endereço do próximo nó Informação nulo 26/03/2017 Fábio Lopes Caversan

Continuando . . . A lista ligada inteira é acessada a partir de um ponteiro externo que aponta para o primeiro nó da lista Um ponteiro externo não está incluindo dentro de um nó. É acessado por referência a uma variável O campo do próximo endereço do último nó da lista contém um valor especial: null O ponteiro nulo (null) marca o final da lista Uma lista sem nós é uma lista vazia ou nula Nesse caso, o ponteiro externo para a lista é nulo Uma lista pode ser inicializada por uma operação do tipo list = null (sendo list o ponteiro externo) 26/03/2017 Fábio Lopes Caversan

Revisando o mapa conceitual de um programa na memória Endereços de retorno de funções, variáveis locais Pilha Heap Variáveis Globais Código do Programa Alocação dinâmica: listas encadeadas 26/03/2017 Fábio Lopes Caversan

Ao “fotografar” a memória do computador Área Livre (Heap) Programa LIST Ponteiro externo que aponta para o primeiro nó da lista ligada. Cuidado com sua manipulação! 26/03/2017 Fábio Lopes Caversan

. . . N1 Nn null N2 N3 L Dois endereços merecem atenção especial: O endereço L do nó inicial que permite identificar em que parte da memória inicia-se a lista O endereço NULL que vem após o nó final. É onde termina a lista Sempre lembrando, cada nó i é composto de duas partes: Info: área onde é armazenado o i-ésimo elemento da lista Next: área onde é armazenado o “endereço” do nó N i + 1 26/03/2017 Fábio Lopes Caversan

Declarando uma classe Nó para uma lista ligada Um dos atributos da classe precisa ser um ponteiro para uma estrutura do mesmo tipo public class Node { private object info; private Node next; ... }; 26/03/2017 Fábio Lopes Caversan

Permitindo o acesso aos atributos De acordo com a linguagem, pode ser necessária a escrita de métodos para ler e escrever nos atributos, garantindo o encapsulamento. Nas linguagens que possuem propriedades, isso pode ser feito com os comandos get e set. Cada vez que atribuímos um valor para a propriedade, o set é chamado. Cada vez que lemos um valor da propriedade, o get é chamado. 26/03/2017 Fábio Lopes Caversan

public class Node { private object info; private Node next; public object Info { get {return info;} set {info = value;} } public Node Next { get {return next;} set {next = value;} ... }; 26/03/2017 Fábio Lopes Caversan

Incluindo um elemento no início da lista info next info next info next list 5 8 nulo 3 p info next info next info next list 5 3 8 nulo 6 p info next info next info next 5 3 8 nulo list 26/03/2017 Fábio Lopes Caversan

6 5 3 8 nulo p list p 6 5 3 8 nulo list 6 5 3 8 nulo list 26/03/2017 Fábio Lopes Caversan

Os passos anteriores são expressos pelo seguinte algoritmo Node p = new Node(); p.Info = x; p.Next = list; list = p; 26/03/2017 Fábio Lopes Caversan

Removendo um nó do início de uma lista 7 5 9 nulo 9 nulo info next info next info next list P X=7 P list 26/03/2017 Fábio Lopes Caversan

Node p = list; list = p.Next; x = p.Info; Os passos anteriores para remover um nó são expressos pelo seguinte algoritmo Node p = list; list = p.Next; x = p.Info; 26/03/2017 Fábio Lopes Caversan

Implementação ligada de Pilhas Incluir um elemento no início de uma lista ligada é semelhante à inclusão numa pilha O 1º nó da lista representa o topo da pilha Vantagem: todas as pilhas ou filas usadas por um programa podem compartilhar a mesma lista de nós disponíveis, desde que não ultrapassam a quantidade total de nós disponíveis 26/03/2017 Fábio Lopes Caversan

Uma pilha usando lista ligada stack 7 nulo 5 3 8 stack 7 nulo 5 3 8 6 26/03/2017 Fábio Lopes Caversan

Como o 1º nó da lista é o topo da lista A implementação de Push (x) poderia ficar: Node p = new Node( ); p.Info = x; p.Next = stack; stack = p; 26/03/2017 Fábio Lopes Caversan

A implementação de x = pop (s) poderia ficar : if (Empty ()) // Exception, mensagem, etc... else { Node p = stack; stack = p.Next; x = p.Info; p = null; return x; } 26/03/2017 Fábio Lopes Caversan

Uma fila usando lista ligada final início 3 nulo 1 7 9 4 final início 6 nulo 7 9 3 4 1 26/03/2017 Fábio Lopes Caversan

Algoritmo para x = q.Remove () if (Empty()) // Exceção, mensagem, etc... Node p = front; x = p.Info; front = p.Next; if (front = = null) rear = null; p = null; return ( x ); A fila q consiste numa fila e dois ponteiros: front e rear. As operações q.Empty() e x=q.Remove() são análogas a s.Empty(s) e x=s.Pop(s), basta substituir front por stack. Muita atenção ao remover o último elemento da fila: rear fica também nulo porque se a fila está vazia front e rear devem ser nulos 26/03/2017 Fábio Lopes Caversan

Algoritmo para q.Insert (x) Node p = new Node(); p.Info = x; p.Next = null; if (rear = = null ) front = p; else rear.Next = p; rear = p; 26/03/2017 Fábio Lopes Caversan

Desvantagens de pilhas e filas como listas ligadas? Mais armazenamento do que o vetor: Info e Next Mas o espaço de armazenamento não é o dobro. Depois, pode-se compactar as informações Cada inclusão/exclusão corresponde a uma inclusão/exclusão na lista de nós disponíveis Grande vantagem: compartilhamento de nós, desde que não ultrapasse o número de nós disponíveis 26/03/2017 Fábio Lopes Caversan

Listas ligadas como estruturas de dados São importantes não só para implementar pilhas e filas, mas como estruturas de dados Acessa-se um item percorrendo-se a lista a partir do início Um vetor permite o acesso direto ao enésimo item com uma única operação Já uma lista exige n operações e é necessário percorrer cada um dos primeiros n-1 elementos antes do enésimo Vantagem da lista: aparece na inserção ou remoção de um elemento porque não é necessário nenhuma movimentação dos n elementos 26/03/2017 Fábio Lopes Caversan

Inserção de um novo elemento num vetor x0 x1 x2 x3 x4 x5 x0 x1 x2 x3 x4 x5 x0 x1 x2 x x3 x4 x5 x6 26/03/2017 Fábio Lopes Caversan

Já numa lista o trabalho de inserção independe do seu tamanho X0 X1 X2 X3 X4 nulo n list X0 X1 X2 X3 X4 nulo InsertAfter (n,x) Node p = new Node() p.Info = x; p.Next = n.Next; n.Next = p DeleteAfter(n) Node p = n.Next; x = p.Info; n.Next = p.Next; p = null; X 26/03/2017 Fábio Lopes Caversan