Paradigmas de Programação

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

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

Tipos de Dados Abstratos

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

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Estruturas de Dados Encadeadas

Tipos Abstractos de Dados (TADs) e Java

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

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

Orientação a Objetos AULA 09

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA)

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

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Estruturas de Dados Filas

Estrutura de dados - Listas Encadeadas

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Estruturas Compostas Parte II

Estrutura de Dados Listas

Paradigmas da Programação PPROG. Linguagem JAVA. Contentores de Objetos

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

Listas Lineares Ordenadas

4. Listas, Pilhas, e Filas

4. Listas, Pilhas, e Filas

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

Pilha e Fila. Pilha em C. Definir o registro que representará cada elemento da pilha.

Estrutura de Dados: Pilhas. Unidade I:

Exercício de Estrutura de dados. Java Fila

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

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

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Pilhas Filas e Listas

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

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

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

4 Conceito de Herança

Estruturas de Dados Pilhas, Filas, Listas

Pilhas. ser acessada somente por uma de suas extremidades. pelo topo. S Uma pilha é uma estrutura linear de dados que pode

ESTRUTURA DE DADOS (TCC )

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

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas 7. Pilhas 8.

Estruturas de Dados Aula 11: TAD Pilha

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

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Pilhas Acesso. Pilha. Fila. Listas lineares especiais. Pilhas e Filas. Listas lineares especiais mais usuais. Disciplina restrita

Algoritmos e Estruturas de Dados I

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Algoritmos e Estruturas de Dados. Lição n.º 3 Coleções: sacos, pilhas e filas

Estruturas de Dados I

Tabelas de Dispersão. Tabela de Dispersão

Estruturas de Dados Pilhas, Filas, Listas

Estruturas de Dados Básicas

AULA 12 ESTRUTURA DE DADOS

Árvores Binárias de Busca

Fila. Algoritmos e Estruturas de Dados I

Aula 5 e 6 Pilhas e suas Aplicações. prof Leticia Winkler

Tabelas de Dispersão. Estrutura de Dados e Algoritmos

BCC202 - Estrutura de Dados I

Transcrição:

Tipos Abstractos de Dados (ADT) Estruturas construídas para armazenar determinados tipos de dados e que especificam operações que permitem a manipulação desses dados. Estudaremos duas das mais simples que se encontram entre as estruturas mais importantes: Pilha (stack) Fila (queue) Veremos a definição destas ADTs de uma forma geral e daremos duas alternativas para implementação : Array e Lista Ligada Tópicos das aulas Teórico Práticas 1

PILHA (STACK): Contentor de objectos em que o processo de inserção e remoção de elementos é feito de acordo com o princípio last-infirst-out (LIFO) Em qualquer ocasião pode ser inserido um novo objecto e será colocado na estrutura de modo que quando for necessário retirar um elemento, sairá o último que foi inserido. (Analogia: pilha de pratos) Aplicações: Armazenamento dos endereços visitados num navegador web Mecanismo undo dos editores de texto Recursividade...... Tópicos das aulas Teórico Práticas 2

PILHA (STACK): Operações : push(obj) - Inserir objecto obj no topo da pilha pop() - Remover objecto do topo da pilha top() - Consultar objecto do topo da pilha (sem o remover) isempty() - Verificar se a pilha está vazia size() - Devolve o número de objectos na pilha Nota: a pilha só tem um acesso, quer para remover objectos quer para inserir objectos. Tópicos das aulas Teórico Práticas 3

PILHA --- Implementação em Java usando arrays Tópicos das aulas Teórico Práticas 4

PILHA --- Implementação em Java usando arrays public class StackArray { private static final int CAPACIDADE=1000; //dimensão do array por omissão private int capacidade; private int tamactual=-1; private Object contentor[]; public StackArray() { this(capacidade); public StackArray(int capac) { capacidade=capac; contentor=new Object[capacidade]; Tópicos das aulas Teórico Práticas 5

public int size() { return tamactual+1; public boolean isempty() { return tamactual<0; public Object top() throws EmptyException { if(isempty()) return null; else return contentor[tamactual]; Tópicos das aulas Teórico Práticas 6

public void push(object obj) throws FullException { if(size()==capacidade) throw new FullException("Stack completa"); else { tamactual++; contentor[tamactual]=obj; public Object pop() throws EmptyException { if(isempty()) return null; else { Object obj=contentor[tamactual]; contentor[tamactual]=null; tamactual--; return obj; Tópicos das aulas Teórico Práticas 7

O método push() lança a excepção FullException (quando o array de implementação da stack ultrapassa a capacidade máxima) Exception Como a classe da excepção é subclasse de Exception, sempre que utilizarmos o métodos push() teremos que o fazer dentro de um bloco try...catch Código da classe FullException: FullException public class FullException extends Exception { public FullException(String erro) { super(erro); Tópicos das aulas Teórico Práticas 8

FILA (QUEUE): Contentor de objectos em que o processo de inserção e remoção de elementos é feito de acordo com o princípio first-infirst-out (FIFO) Em qualquer ocasião pode ser inserido um novo objecto e será colocado na estrutura (fim da fila) de modo que quando for necessário retirar um elemento, sairá o primeiro que foi inserido, que se encontra no início da fila. (Analogia: fila para entrada no autocarro) Aplicações: Processamento de informação em que a ordem obedeça ao princípio FIFO (Simulações ). Tópicos das aulas Teórico Práticas 9

FILA (cont) Operações : enqueue(obj) - Inserir objecto obj no fim da fila dequeue() - Remover objecto do início da fila front() - Consultar objecto do início da fila (sem o remover) isempty() - Verificar se a fila está vazia size() - Devolve o número de objectos na fila Nota: a fila tem dois acessos,início para remover objectos e fim para inserir objectos. Tópicos das aulas Teórico Práticas 10

FILA (cont) Tópicos das aulas Teórico Práticas 11

FILA ----- implementação em Java usando arrays public class QueueArray { private static final int CAPACIDADE=1000;// private int capacidade; private int tamactual=-1; private Object contentor[]; public QueueArray() { this(capacidade); public QueueArray(int capac) { capacidade=capac; contentor=new Object[capacidade]; Tópicos das aulas Teórico Práticas 12

FILA ----- implementação em Java usando arrays public int tamanho() { return tamactual+1; public boolean isempty() { return tamactual<0; public Object topo() { if(isempty()) return null; else return contentor[tamactual]; Tópicos das aulas Teórico Práticas 13

FILA ----- implementação em Java usando arrays //junta objecto no fim da queue public void enqueue(object obj) throws QueueFullException { if(tamanho()==capacidade) throw new QueueFullException("Queue completa"); else { tamactual++; contentor[tamactual]=obj; Tópicos das aulas Teórico Práticas 14

FILA ----- implementação em Java usando arrays //retira objecto do inicio da queue public Object dequeue(){ if(isempty()) return null; else { Object obj=contentor[0]; for(int i=0;i<tamactual-1;i++) { //faz shift para a esquerda dos elementos do array contentor[i]=contentor[i+1]; contentor[tamactual]=null; tamactual--; return obj; Tópicos das aulas Teórico Práticas 15

LISTA SIMPLESMENTE LIGADA Vimos como implementar os tipos abstractos de dados, pilha e fila, usando arrays. Vantagem desta implementação: Desvantagem Simplicidade Pouco dinâmica, é necessário fixar o número máximo de elementos que a estrutura pode comportar. Para colmatar esta desvantagem vamos usar uma implementação alternativa ----- lista simplesmente ligada Tópicos das aulas Teórico Práticas 16

LISTA SIMPLESMENTE LIGADA Lista simplesmente ligada é uma colecção de nós. Cada nó é um objecto composto por dois campos 1. elemento -- conteúdo da lista 2. prox -- referência para o próximo nó da lista A lista encadeia os nós, alocados em endereços de memória não consecutivos, e o campo referência para o próximo nó permite a ligação com o nó seguinte, até que o último nó tem o valor null. O acesso aos elementos da lista é feito através de uma referência para o primeiro nó designado por cabeça. Seguindo a referência prox, encadeamos os diferentes nós. Tópicos das aulas Teórico Práticas 17

LISTA SIMPLESMENTE LIGADA (cont) Tópicos das aulas Teórico Práticas 18

LISTA SIMPLESMENTE LIGADA (cont) Tópicos das aulas Teórico Práticas 19

Classe NO ---- usada na implementação de estruturas através de lista ligada public class No { private Object elemento; private No prox; //referência para o nó seguinte //Construtores public No() { this(null,null); public No(Object o,no n) { elemento=o; prox=n; Tópicos das aulas Teórico Práticas 20

Classe NO ---- usada na implementação da stack através de lista ligada (cont) public void setelemento(object novo) { elemento=novo; public void setprox(no novo) { prox=novo; public Object getelemento() { return elemento; public No getprox() { return prox; Tópicos das aulas Teórico Práticas 21

Pilha ---- implementação em Java usando lista ligada Nesta implementação há necessidade de considerar um atributo designado por head (cabeça) que é uma referência para o nó de acesso à estrutura pilha. Tópicos das aulas Teórico Práticas 22

Pilha ---- implementação em Java usando lista ligada Tópicos das aulas Teórico Práticas 23

Pilha ---- implementação em Java usando lista ligada public class StackLista { private No cabeca; //referência para o nó de acesso à stack private int tamanho; //nº de elementos da stack //construtor public StackLista() { cabeca=null; tamanho=0; public int size() { return tamanho; //verifica se a stack está vazia public boolean isempty() { if(cabeca==null) return true; else return false; Tópicos das aulas Teórico Práticas 24

Pilha ---- implementação em Java usando lista ligada (cont) //junta elemento à stack public void push(object obj) { No n=new No(); n.setelemento(obj); n.setprox(cabeca); cabeca=n; tamanho++; //retira elemento da stack public Object pop() { Object obj; if(isempty()) return null; else { obj=cabeca.getelemento(); cabeca=cabeca.getprox(); tamanho--; return obj; Tópicos das aulas Teórico Práticas 25

Pilha ---- implementação em Java usando lista ligada (cont) //consulta o elemento de topo da stack public Object topo() { if(isempty()) return null; else return cabeca.getelemento(); Tópicos das aulas Teórico Práticas 26

Fila ---- implementação em Java usando lista ligada Nesta implementação há necessidade de considerar dois atributos designados por front (início) e back (fim). São referências para os acessos aos nós nas extremidades da lista usados nas operações de eliminação e inserção. Tópicos das aulas Teórico Práticas 27

Fila ---- implementação em Java usando lista ligada Tópicos das aulas Teórico Práticas 28

Fila ---- implementação em Java usando lista ligada public class QueueLista { private No inicio; private No fim; private int tamanho; //referência para o nó início da fila //referência para o nó fim da fila public QueueLista() { inicio = fim = null; tamanho = 0; public int size() { return tamanho; Tópicos das aulas Teórico Práticas 29

Fila ---- implementação em Java usando lista ligada (cont) public boolean isempty() { return inicio==null; //junta elemento no fim da queue public void enqueue(object obj) { No n = new No(); if (isempty()) { inicio = fim = n; else { fim.setprox(n); fim = n; n.setelemento(obj); tamanho++; Tópicos das aulas Teórico Práticas 30

Fila ---- implementação em Java usando lista ligada (cont) //remove elemento do inicio da queue public Object dequeue() { Object obj; if (isempty()) { return null; else { obj = inicio.getelemento(); inicio = inicio.getprox(); //actualiza a referência para o fim da fila caso esta fique vazia if (inicio == null) { fim = null; tamanho--; return obj; Tópicos das aulas Teórico Práticas 31

Exercício: Construa uma classe de teste para cada uma das estruturas de dados estudadas usando objectos do tipo Ponto. Tópicos das aulas Teórico Práticas 32