JAVA. José de Siqueira UFMG - ICEx - DCC

Documentos relacionados
UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Paradigmas de Programação

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Programação Orientada a Objetos II JAVA Décima Aula. Prof. Rogério Albuquerque de Almeida

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Introdução a Programação. Tipos Abstratos de Dados Implementando Pilha e Fila

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

Tipos Abstractos de Dados (TADs) e Java

Prof. Jesus José de Oliveira Neto

Estruturas de Dados Básicas

INF 1620 P2-01/11/03 Questão 1 Nome:

Estruturas de Dados Básicas

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

UFSC-CTC-INE INE Estruturas de Dados. Pilhas. Prof. Ronaldo S. Mello 2002/2. Pilha

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

Palavras Reservadas da Linguagem Java

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Programação por Objectos. Java

Estruturas de Dados Aula 11: TAD Pilha

Escreva em Java a classe NumeroComplexo que represente um número complexo. A classe deverá ter os seguintes construtores:

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

1. Listas sequenciais versus listas ligadas. Lista sequencial

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Listas Encadeadas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Estrutura de Dados Listas

Estrutura de Dados: Pilhas. Unidade I:

SCC Algoritmos e Estruturas de Dados I

Orientação a Objetos AULA 09

ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Estrutura de dados - Listas Encadeadas

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Vector Java. Empregado.java

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Linguagem de Programação III

Linguagem de Programação II Implementação

Listas Lineares Ordenadas

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

LISTAS LINEARES. Estrutura de Dados

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Pilhas e Filas. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.2 e 3.3

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc.

Algoritmos e Estruturas de Dados II IEC013

9 Classes Abstractas e Interfaces

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 07: Filas

Estruturas de Dados com Jogos. Capítulo 2 Pilhas - Alocação Sequencial e Estática

Estruturas Compostas Parte II

ESTRUTURA DE DADOS (TCC )

Estruturas de Dados Encadeadas

Strings e Arrays POO

Fila e Deque. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Revisão de TDA, Pilhas e Filas

Estrutura de Dados II. Prof. Sérgio Portari

Genéricos. Profa. Thienne Johnson EACH/USP

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

LISTA DUPLAMENTE ENCADEADA

Filas Implementação Sequencial

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

INF 1007 Programação II

Algoritmos e estrutura de dados

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA)

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista

Prof. Jesus José de Oliveira Neto

1 - O que será impresso quando o seguinte programa escrito na linguagem JAVA for compilado e executado?

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

SCC 202 Prova 1. 28/9/2010 Resolução e Comentários

Aplicações de vetores

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

TRATAMENTO DE EXCEÇÕES

1. Por que não utilizar a notação de composição da UML para mostrar que um cachorro é composto de altura, peso, cor e data de nascimento?

Análise de Programação

DCC / ICEx / UFMG. Membros de Classes. Eduardo Figueiredo.

Exercício de Estrutura de dados. Java Fila

Transcrição:

ESTRUTURAS DE DADOS JAVA BÁSICAS EM José de Siqueira UFMG - ICEx - DCC 1 o semestre de 2005

O Tipo Abstrato de Dados Pilha O TAD pilha tem quase as mesmas operações apresentadas anteriormente: 1. empilha(o): insere o objeto o no topo da pilha. Entrada: objeto. Saída: nenhuma. 2. desempilha(): retira o objeto no topo da pilha e o roetorna; ocorre erro se a pilha estiver vazia. Entrada: nenhuma. Saída: objeto. 3. tamanho(): retorna o número de objetos na pilha. Entrada: nenhuma. Saída: inteiro. 4. vazia(): Retorna um booleano indicando se a pilha está vazia. Entrada: nenhuma. Saída: booleano. 5. topo(): Retorna o objeto no topo da pilha, sem retirá-lo; ocorre um erro se a pilha estiver vazia. Entrada: nenhuma. Saída: objeto. José de Siqueira 1

Uma interface para pilhas em Java Em Java, já existe a classe para o TAD pilha: java.util.stack. Os métodos disponíveis nesta classe, entre outros, são: push(obj), pop(), equivalentes a empilha(o) e desempilha() e peek(), equivalente a topo(), tamanho() e vazia(). Os métodos pop() e peek() lançam a exceção StackEmptyException se a pilha estiver vazia quando eles são chamados. Apesar de já existir esta classe em Java, aqui estamos interessados em aprender como projetar e implementar uma pilha e uma fila em Java. A implementação de um TAD em Java envolve dois passos: 1. a definição de uma API (Application Programming Interface) que descreve os nomes dos métodos que o TAD oferece, como eles são declarados e como são usados. 2. uma ou mais implementações concretas dos métodos descritos na interface (API) associada com o TAD. José de Siqueira 2

public interface Pilha { /* retorna o número de itens na pilha */ public int tamanho(); /* retorna true se a pilha está vazia, false senão */ public boolean vazia(); /*retorna, sem removê-lo, o item do topo da pilha; lança StackEmptyException se a pilha estiver vazia*/ public Object topo() throws StackEmptyException; /* insere um item, passado em parâmetro, no topo da pilha */ public void empilha(object element); /* remove e retorna o item no topo da pilha; lança StackEmptyException se a pilha estiver vazia*/ public Object desempilha() throws StackEmptyException; /* Exceções lançadas quando se tenta usar as operações em uma pilha vazia são tratadas aqui*/ public class StackEmptyException extends RuntimeException { public StackEmptyException (String erro) { super(erro); José de Siqueira 3

Uma implementação baseada em vetores Nesta implementação baseada em vetores, como o vetor é alocado estaticamente, ao tentar empilhar um objeto em uma pilha cheia, devemos lançar uma exceção StackFullExcpetion. Esta exceção não foi definida no TAD Pilha por ser específica desta implementação. /* Implementação da interface Pilha usando um vetor de tamanho fixo. Uma exceção é lançada ao tentar empilhar um objeto em uma pilha cheia. */ public class PilhaComVetor implements Pilha { /* Tamanho máximo fixo do vetor usado como pilha */ public static final int CapacidadeMax = 1000; /* Capacidade da pilha */ private int Capacidade; /* Vetor usado como pilha */ private Object P[ ]; /* índice do elemento do topo da pilha */ private int topo = -1; José de Siqueira 4

/* inicia a pilha para usar um vetor com tamanho máximo CapacidadeMax */ public PilhaComVetor() { this(capacidademax); /* inicia a pilha para um arranjo com o tamanho fornecido; o parâmetro é o tamanho do vetor */ public PilhaComVetor(int tam) { Capacidade = tam; P = new Object[Capacidade]; public int tamanho() { return(topo + 1); public boolean vazia() { return(topo < 0); public void empilha(object obj) throws StackFullException { if (tamanho() == Capacidade) throw new StackFullException( Pilha cheia! ); P[++topo] = obj; José de Siqueira 5

public Object desempilha() throws StackEmptyException { Object elemento; if (vazia()) throw new StackEmptyException( Pilha vazia! ); elemento = P[topo]; P[topo] = null; // Libera P[topo] para a // coleta de lixo topo--; return elemento; A pilha declarada acima é genérica, pois os elementos são instâncias da classe Object de Java. Pode-se armazenar qualquer objeto na pilha, pois todas as classes Java herdam da classe Object. Assim, podemos empilhar objetos das classes Integer, Estudante ou até mesmo Planetas. No entanto, ao desempilhar, é preciso fazer uma conversão para a classe específica a que o objeto realmente pertence, como mostra o trecho de programa abaixo: José de Siqueira 6

public static Integer[] inverte(integer[] a) { PilhaComVetor P = new PilhaComVetor(a.length); Integer[] b = new Integer[a.length]; for (int i = 0; i < a.length; i++) P.empilha(a[i]); for (int i = 0; i < a.length; i++) b[i] = (Integer) (P.desempilha()); return b; O TAD fila em Java As operações do TAD fila são: 1. insere(o): insere o obejto o no fim da fila. Entrada: objeto. Saída: nenhuma. 2. retira(o): retira e retorna o objeto do início da fila. Lança uma exceção se a fila estiver vazia. Entrada: nenhuma. Saída: objeto. 3. tamanho(): retorna o número de objetos na fila. Entrada: nenhuma. Saída: inteiro. José de Siqueira 7

4. vazia(): retorna um booleano indicando se a fila está vaiza ou não. Entrada: nenhuma. Saída: booleano. 5. frente(): retorna o objeto no início da fila, sem retirá-lo.lança uma exceção se a fila estiver vazia. Entrada: nenhuma. Saída: objeto. public interface Fila { /* retorna o número de itens na fila */ prublic int tamanho(); /* retorna true se a fila estiver vazia, false senão */ public boolean vazia(); /* retorna o item à frente na fila; lança QueueEmptyException se a fila estiver vazia */ public Object frente() throws QueueEmptyException; /* insere elemento no final da fila */ public void insere(object item); /* remove e retorna o item à frente da fila; lança QueueEmptyException se a fila estiver vazia */ public Object retira() throws QueueEmptyException; José de Siqueira 8

Implementação de filas com arranjos Para implementar uma fila em um arranjo de tamanho N, é melhor utilizar uma fila circular. Para isso, temos dois apontadores i e f que indicam o início e o fim da fila. A fila está vazia quando i = f e f indica a próxima posição livre. Problema: O que acontece quando f = N? O que fazer neste caso? A implementação da circularidade é simples se o incremento for feito como (i + 1) mod N ou (f + 1) mod N. Problema: como distinguir que a fila está cheia? Por exemplo, deixando sempre uma casa vazia entre o fim e o início. Ou inserindo, no máximo, N 1 elementos. José de Siqueira 9

Algoritmo tamanho(); retorna (N-i+f) mod N; Algoritmo vazia(); retorna (i=f); Algoritmo frente(); se vazia() ent~ao lançar uma QueueEmptyException; retorna F[i]; Algoritmo retira(); se vazia() ent~ao lançar uma QueueEmptyException ; aux F[i]; F[i] null; i (i+1) mod N; retorna aux; Algoritmo insere(o); se tamanho() = N - 1 ent~ao lançar uma QueueFullException; F[f] o; f (f+1) mod N; José de Siqueira 10

Listas encadeadas em Java public class Nó { // Variáveis de inst^ancia private Object item; private Nó prox; // Construtores simples public Nó() { this(null,null); public Nó(Object i, Nó n) { item = i; prox = n; // Métodos de acesso Object retitem() { return item; Nó retprox() { return prox; // Modificadores void positem(object novoitem) { item = novoitem; void posprox(nó novonó) { prox = novonó; José de Siqueira 11

Implementação de uma pilha com listas encadeadas public class PilhaEncadeada implements Pilha { private Nó topo; // refer^encia para o nó do // topo private int tam; // número de itens na pilha public PilhaEncadeada() { topo = null; tam = 0; public int tamanho() { return tam; public boolean vazia() { return (topo == null); public void empilha(object item) { Nó v = new Nó(); // cria um novo nó v.positem(item); v.posprox(topo); // encadeia o novo nó topo = v; tam++; José de Siqueira 12

public Object topo() throws StackEmptyException { if (vazia()) throw new StackEmptyException( Pilha está vazia. ); return topo.retitem(); public Object desempilha() throws StackEmptyException { if (vazia()) throw new StackEmptyException( Pilha está vazia. ); Object aux = topo.retitem(); topo = topo.retprox; // aponta para o // próximo nó tam--; return aux; José de Siqueira 13

Implementação de uma fila com listas encadeadas Apresentamos apenas a implementação de dois métodos principais. As declarações de classe e os outros métodos para a implementação de filas com listas encadeadas são deixadas como exercício. public void insere(object obj) { Nó nó = new Nó(); nó.positem(obj); nó.posprox(null); // o nó inserido será o do // final da lista if (tam == 0) //inserç~ao em uma fila vazia else primeiro = nó último.posprox(nó); // insere nó no final // da fila último = nó; // aponta para o nó inserido tam++; José de Siqueira 14

public Object retira() throws QueueEmptyException { Object obj; if (tam == 0) throw new QueueEmptyException ( Fila está vazia.); obj = primeiro.retitem(); primeiro = primeiro.retprox(); tam--; if (tam == 0) último = null // a fila ficou // vazia return obj; José de Siqueira 15