Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
O TAD fila O TAD fila armazena objetos arbitrários
Marco Antonio Montebello Júnior
Marco Antonio Montebello Júnior
Aquiles Burlamaqui. i ? int i; i ? j 10 int j = 10; j 10.
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Listas duplamente encadeadas
Programação II Estruturas de Dados
TAD Deque ATAI.
Estrutura de Dados e Algoritmos e Programação e Computadores II
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
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
FILAS (Queues) Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada; Estrutura FIFO (First In First.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Estrutura de dados Busca
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Listas Lineares Estrutura de Dados.
Algoritmos e Estruturas de Dados
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Tipos Abstratos de Dados
1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Denise Guliato Faculdade de Computação – UFU
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Pilhas Profa. Nádia Félix.
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
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Listas Simplesmente Encadeadas
Tipos Especiais de Listas
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
Prof. Alessandro Gonçalves
Lista Linear Base para outras estruturas
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Professor Ulisses Vasconcelos
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
JAVA – Fila ATAI.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da profa. Renata Galante.
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estrutura de Dados Aula 3 - Listas
Estrutura de dados Pilhas e filas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Pilha dinâmica Prof.° Jean Daniel Henri Merlin Andreazza
Estrutura de Dados Prof. André Cypriano M. Costa
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.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Transcrição da apresentação:

Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Programação II – Prof. Mateus Raeder Listas especiais O armazenamento sequencial (estático) é útil quando as estruturas sofrem poucas remoções ou inserções, ou quando estas não acarretam grandes movimentações de nós –Não é exatamente o caso de listas que permitem inserção em qualquer posição –O armazenamento sequencial é mais utilizado para implementas tipos especiais de listas: Filas (Queue em inglês) Pilhas (Stack em inglês) Deques (Deque em inglês)

Programação II – Prof. Mateus Raeder Pilha (Stack)

Programação II – Prof. Mateus Raeder Pilhas Os elementos são inseridos e removidos sempre na extremidade final, chamada de topo da pilha Contém um ponteiro (variável) que marca o topo da pilha Implementa a norma LIFO (Last-In, First-Out) –Último a entrar, primeiro a sair Pilha vazia: topo = -1

Programação II – Prof. Mateus Raeder Pilhas Suponhamos uma pilha de números inteiros P que, em certo momento, possui os seguintes 7 elementos: Declarando um array de inteiros de nome P com MAX=10 elementos (P[0..MAX-1]), teremos a seguinte pilha:

Programação II – Prof. Mateus Raeder Operações sobre pilhas - inserir número 2 - inserir número 8 - inserir número 4 - remover elemento - inserir número 1 - remover elemento top 1

Programação II – Prof. Mateus Raeder Exercício: Pilhas Dada a pilha ao lado, realize as operações abaixo (cumulativamente) e desenhe a pilha resultante em cada passo: –Inserir 7 –Retirar o primeiro elemento –Inserir -4 –Inserir 6 –Retirar o primeiro elemento 3

Programação II – Prof. Mateus Raeder Operações sobre pilhas public boolean isEmpty( ) –verifica se a pilha está vazia public boolean isFull( ) –verifica se a pilha está cheia public boolean push( int element ) –insere o nó no topo da pilha

Programação II – Prof. Mateus Raeder Operações sobre pilhas public int pop( ) –retorna e remove o nó do topo da pilha public int getTop ( ) –retorna o nó do topo da pilha, sem removê-lo public void print( ) –exibe todos os nós da pilha

Programação II – Prof. Mateus Raeder Pilhas Supondo a existência da classe Stack, desenhe a pilha criada através do código abaixo (a saída do programa): public static void main(String args[]){ Stack p = new Stack(5); p.push(4); p.push(7); p.push(14); p.pop(); p.push(3); p.pop(); p.print(); }

Programação II – Prof. Mateus Raeder Pilha public class Stack { private int s[]; private int top = -1; public Stack (int size){ s = new int[size]; }... //demais métodos }

Programação II – Prof. Mateus Raeder Pilha Verificar se está vazia ou se está cheia –Vazia: /* Retorna: - true se a lista está vazia - false caso contrário */ public boolean isEmpty(){ if(top == -1) return true; return false; }

Programação II – Prof. Mateus Raeder Pilha Verificar se está vazia ou se está cheia –Cheia: /* Retorna: - true se a lista está vazia - false caso contrário */ public boolean isFull(){ if(top == s.length - 1) return true; return false; }

Programação II – Prof. Mateus Raeder Pilha Inserir e remover elementos –Inserir (push) public boolean push(int element){ if(isFull()) return false; top++; s[top] = element; return true; }

Programação II – Prof. Mateus Raeder Pilha Inserir e remover elementos –Remover (pop) public int pop(){ if(isEmpty()){ System.out.println(“ERRO”); return 0; } int element = s[top]; top--; return element; }

Programação II – Prof. Mateus Raeder Pilha Retornar o elemento do topo, sem remover public int getTop(){ if(isEmpty()){ System.out.println(“ERRO”); return 0; } return s[top]; }

Programação II – Prof. Mateus Raeder Pilha Imprimir os elementos da pilha public void print(){ for(int i=top; i>=0; i--) System.out.println(s[i]); }

Programação II – Prof. Mateus Raeder Pilha public static void main(String args[]) { Stack s = new Stack(6); s.push(1); s.push(2); s.push(3); s.push(4); s.push(5); s.push(6); int removed = s.pop(); removed = s.pop(); s.print(); }

Programação II – Prof. Mateus Raeder Fila (Queue)

Programação II – Prof. Mateus Raeder Filas Elementos são inseridos no final da fila e retirados do início da fila Geralmente a implementação contém 2 ponteiros (variáveis): – first: para o início da fila – last: para o fim da fila FIFO (First-In, First-Out) –Primeiro a entrar, primeiro a sair Fila vazia: quando last for igual a first-1

Programação II – Prof. Mateus Raeder Filas Suponhamos uma fila de números inteiros F que, em certo momento, possui os seguintes 7 elementos: Declarando um array de inteiros de nome F com MAX=10 elementos (F[0..MAX-1]), teremos a seguinte fila:

Programação II – Prof. Mateus Raeder Exercício: Filas Dada a fila acima, realize as operações abaixo (cumulativamente) e desenhe a pilha resultante em cada passo: –Inserir 10 –Retirar o primeiro elemento –Inserir 2 –Retirar o primeiro elemento 2841

Programação II – Prof. Mateus Raeder Operações sobre filas public boolean isEmpty( ) –verifica se a fila está vazia public boolean isFull( ) –verifica se a fila está cheia public boolean enqueue( int element ) –insere o elemento no final da fila

Programação II – Prof. Mateus Raeder Operações sobre filas public int dequeue( ) –remove e retorna o primeiro elemento da fila public int getFirst( ) –retorna o primeiro elemento da fila, sem removê-lo public void print( ) –exibe o conteúdo da fila

Programação II – Prof. Mateus Raeder Filas Supondo a existência da classe Queue, desenhe a fila criada através do código abaixo (a saída do programa): public static void main(String args[]){ Queue f = new Queue(5); f.enqueue(4); f.enqueue(7); f.enqueue(14); f.dequeue(); f.enqueue(3); f.dequeue(); f.print(); }

Programação II – Prof. Mateus Raeder Filas public class Queue { protected int first = 0, last = -1; protected int q[]; public Queue(int size) { q = new int[size]; }... //demais métodos }

Programação II – Prof. Mateus Raeder Filas Verificar se está vazia ou se está cheia –Vazia: public boolean isEmpty() { if (last == (first-1)) return true; return false; }

Programação II – Prof. Mateus Raeder Filas Verificar se está vazia ou se está cheia –Cheia: public boolean isFull() { if (last == (q.length-1)) return true; return false; }

Programação II – Prof. Mateus Raeder Filas Inserção e remoção de elementos –Inserção (enqueue): public boolean enqueue (int element) { if (isFull()) return false; last++; q[last] = element; return true; }

Programação II – Prof. Mateus Raeder Filas Inserção e remoção de elementos –Remoção (dequeue): public int dequeue() { if (isEmpty()){ System.out.println(“ERRO”); return 0; } int element = q[first]; first++; return element; }

Programação II – Prof. Mateus Raeder Filas Retornar o primeiro elemento sem remover public int getFirst(){ if (isEmpty()) { System.out.println(“ERRO”); return 0; } return q[first]; }

Programação II – Prof. Mateus Raeder Filas Imprimir os elementos da fila public void print() { for (int i = first; i <= last; i++) System.out.print(q[i] + ", "); System.out.println(); }

Programação II – Prof. Mateus Raeder Fila Circular (Circular Queue)

Programação II – Prof. Mateus Raeder Fila circular Observamos que uma fila pode ser considerada como cheia mesmo não contendo nenhum elemento Isto acontece pela maneira com a qual lidamos com os índices de início e de final da fila Uma solução é trabalhar com filas circulares

Programação II – Prof. Mateus Raeder Fila circular public class CircularQueue { private int[] queue; private int first = -1, last = -1; public CircularQueue (int length) { queue = new int[length]; } public boolean isFull() { if ((first == 0 && last == queue.length-1) || (first == last+1)) return true; else return false; }...//demais métodos

Programação II – Prof. Mateus Raeder Fila circular...//demais métodos public boolean isEmpty() { if (first == -1) return true; else return false; }...//demais métodos

Programação II – Prof. Mateus Raeder Fila circular public boolean enqueue (int element){ if(isFull()) return false; if(last == queue.length-1 || last == -1){ last = 0; queue[last] = element; if(first == -1) first = 0; } else{ last++; queue[last] = element; return true; }

Programação II – Prof. Mateus Raeder Fila circular public int dequeue() { if (isEmpty()){ System.out.println(“ERRO”); return 0; } int element = queue[first]; if (first == last) first = last = -1; else if (first == queue.length - 1) first = 0; else first++; return element; }

Programação II – Prof. Mateus Raeder Fila circular public int getFirst(){ if (isEmpty()){ System.out.println(“ERRO”); return 0; } return queue[first]; }

Programação II – Prof. Mateus Raeder Fila circular public static void main(String args[]) { CircularQueue f = new CircularQueue(5); f.enqueue(1); f.enqueue(2); f.enqueue(3); f.enqueue(4); f.dequeue(); f.enqueue(5); f.enqueue(6); f.enqueue(7); f.enqueue(8); f.print(); }

Programação II – Prof. Mateus Raeder Exercícios: fila circular Implemente métodos para exibir o conteúdo de uma fila circular de 2 maneiras: –No método main, faça o código necessário para que, enquanto a fila não estiver vazia, esvazie a fila, exibindo os elementos retirados –Crie um método print() na classe CircularQueue que exiba o conteúdo da fila na ordem em que foram inseridos! 0,5 na prova do Grau A

Programação II – Prof. Mateus Raeder Resposta (método print) public void print (){ if(!isEmpty()){ if(first < last){ for(int i=first; i<=last; i++) System.out.print(queue[i]+”, ”); } else{ for(int i=first; i<queue.length; i++) System.out.print(queue[i]+”, ”); for(int i=0; i<=last; i++) System.out.print(queue[i]+”, ”); } System.out.println(); }

Programação II – Prof. Mateus Raeder Deque (Deque – Double Ended Queue)

Programação II – Prof. Mateus Raeder Deque O deque é um tipo de fila em que as inserções e remoções podem ser realizadas em ambas as extremidades, que chamaremos de frente (front) e final (back)

Programação II – Prof. Mateus Raeder Operações sobre deques public boolean isEmpty() –verifica se o deque está vazio public boolean isFull( ) –verifica se o deque está cheio public boolean enqueueFront( int element ) –insere o elemento na cabeça do deque public boolean enqueueBack( int element ) –insere o elemento no final do deque

Programação II – Prof. Mateus Raeder Operações sobre deques public int dequeueFront() –remove e retorna o primeiro elemento do deque public int dequeueBack() –remove e retorna o último elemento do deque public int getFirst() –retorna o primeiro elemento do deque, sem removê-lo public int getLast() –retorna o último elemento do deque, sem removê-lo public void print() –exibe o conteúdo do deque

Programação II – Prof. Mateus Raeder Deques public class Deque extends Queue{ public Deque (int size){ super(size); } public int getLast(){ if(isEmpty()){ System.out.println(“ERRO”); return 0; } return q[last]; }...//demais métodos

Programação II – Prof. Mateus Raeder Deques public boolean enqueueFront (int el){ if (isFull()) { return false; } System.arraycopy(q, first, q, first + 1, last - first + 1); q[first] = el; last++; return true; }

Programação II – Prof. Mateus Raeder Deques public boolean enqueueBack (int el) { return enqueue(el); } public int dequeueFront() { return dequeue(); } public int dequeueBack() { if (isEmpty()){ System.out.println(“ERRO”); return 0; } int element = q[last]; last--; return element; }

Programação II – Prof. Mateus Raeder Deques public static void main(String args[]) { Deque d = new Deque(5); d.enqueueBack(1); d.enqueueFront(2); d.enqueueBack(3); d.print(); System.out.println( d.dequeueFront() ); System.out.println( d.dequeueBack() ); System.out.println( d.dequeueFront() ); System.out.println( d.dequeueBack() ); }