TAD Deque ATAI 1 ADT Deque n n

  • Slides: 18
Download presentation
TAD Deque ATAI 1

TAD Deque ATAI 1

ADT Deque n n Uma extensão da estrutura de dados fila que suporta inserções

ADT Deque n n Uma extensão da estrutura de dados fila que suporta inserções e remoções no início e no final da fila é chamada de fila de duas cabeças (double-ended queue ou deque) O ADT deque D suporta os seguintes métodos fundamentais: q insere. Primeiro(e): Insere um novo elemento e no início de D Entrada: Objecto; Saída: Nenhuma q q q insere. Ultimo(e): Insere um novo elemento e no final de D Entrada: Objecto; Saída: Nenhuma remove. Primeiro(): Remove e retorna o primeiro elemento de D Entrada: Nenhuma; Saída: Objecto remove. Ultimo(): Remove e retorna o último elemento de D Entrada: Nenhuma; Saída: Objecto 2

ADT Deque Adicionalmente temos os seguintes métodos de suporte: n primeiro(): Retorna o primeiro

ADT Deque Adicionalmente temos os seguintes métodos de suporte: n primeiro(): Retorna o primeiro elemento de D Entrada: Nenhuma; Saída: Objecto n ultimo(): Retorna o último elemento de D Entrada: Nenhuma; Saída: Objecto n tamanho(): Retorna o número de elementos de D Entrada: Nenhuma; Saída: Inteiro n esta. Vazia(): Determina se D está vazia Entrada: Nenhuma; Saída: Booleano 3

Exemplo de execução numa deque Operação Saída D insere. Primeiro(3) - (3) insere. Primeiro(5)

Exemplo de execução numa deque Operação Saída D insere. Primeiro(3) - (3) insere. Primeiro(5) - (5, 3) remove. Primeiro( ) 5 (3) insere. Ultimo(7) - (3, 7) remove. Primeiro( ) 3 (7) remove. Ultimo( ) 7 () remove. Primeiro( ) "erro" () esta. Vazia( ) verdade () insere. Primeiro(9) - (9) insere. Ultimo(7) - (9, 7) tamanho( ) 2 (9, 7) insere. Primeiro(3) - (3, 9, 7) insere. Ultimo(5) - (3, 9, 7, 5) remove. Ultimo( ) 5 (3, 9, 7) 4

Interface Deque public interface Deque { int tamanho(); boolean esta. Vazia(); void insere. Primeiro(Object

Interface Deque public interface Deque { int tamanho(); boolean esta. Vazia(); void insere. Primeiro(Object novo) throws Deque. Cheio. Exception; void insere. Ultimo(Object novo) throws Deque. Cheio. Exception; Object remove. Ultimo() throws Deque. Vazio. Exception; Object remove. Primeiro() throws Deque. Vazio. Exception; Object ultimo() throws Deque. Vazio. Exception; Object primeiro() throws Deque. Vazio. Exception; } 5

Lista duplamente ligada class DLNode { private Object element; private DLNode next, prev; DLNode()

Lista duplamente ligada class DLNode { private Object element; private DLNode next, prev; DLNode() { this(null, null); } DLNode(Object e, DLNode p, DLNode n) { element = e; next = n; prev = p; } void set. Element(Object new. Elem) { element = new. Elem; } void set. Next(DLNode new. Next) { next = new. Next; } void set. Prev(DLNode new. Prev) { prev = new. Prev; } Object get. Element() { return element; } DLNode get. Next() { return next; } DLNode get. Prev() { return prev; } } 6

Implementação do Deque com lista dupla public class My. Deque implements Deque { DLNode

Implementação do Deque com lista dupla public class My. Deque implements Deque { DLNode header, trailer; int size; // sentinels // number of elements public My. Deque() { // initialize an empty deque header = new DLNode(); trailer = new DLNode(); header. set. Next(trailer); // make header point to trailer. set. Prev(header); // make trailer point to header size = 0; } 7

Método remove. Ultimo() public Object remove. Ultimo() throws Deque. Empty. Exception { if (esta.

Método remove. Ultimo() public Object remove. Ultimo() throws Deque. Empty. Exception { if (esta. Vazia()) throw new Deque. Empty. Exception("Deque is empty. "); DLNode last = trailer. get. Prev(); Object o = last. get. Element(); DLNode secondtolast = last. get. Prev(); trailer. set. Prev(secondtolast); secondtolast. set. Next(trailer); size--; return o; } 8

Método insere. Primeiro() public void insere. Primeiro (Object o) { DLNode second = header.

Método insere. Primeiro() public void insere. Primeiro (Object o) { DLNode second = header. get. Next(); DLNode first = new DLNode(o, header, second); second. set. Prev(first); header. set. Next(first); size++; } 9

Implementação de Pilha com Deque - 1 n A tabela a seguir mapeia os

Implementação de Pilha com Deque - 1 n A tabela a seguir mapeia os métodos do ADT pilha para os métodos da deque: Método da Pilha Implementação da Deque tamanho( ) esta. Vazia ( ) topo( ) ultimo( ) empilha(e) insere. Ultimo(e) desempilha( ) remove. Ultimo( ) 10

Implementação de Pilha com Deque - 2 n A tabela a seguir mapeia os

Implementação de Pilha com Deque - 2 n A tabela a seguir mapeia os métodos do ADT pilha para os métodos da deque: Método da Pilha Implementação da Deque tamanho( ) esta. Vazia ( ) topo( ) primeiro( ) empilha(e) insere. Primeiro(e) desempilha( ) remove. Primeiro( ) 11

Implementação de Fila com Deque n A tabela a seguir mapeia os métodos do

Implementação de Fila com Deque n A tabela a seguir mapeia os métodos do ADT fila para os métodos da deque: Método da Fila Implementação da Deque tamanho( ) esta. Vazia ( ) inicio( ) primeiro( ) insere(e) insere. Ultimo(e) remove( ) remove. Primeiro( ) 12

Implementação de Pilha com Deque public class Deque. Stack implements Pilha { private Deque

Implementação de Pilha com Deque public class Deque. Stack implements Pilha { private Deque d; public Deque. Stack() { d = new Implem. Deque(); } public int tamanho() { return d. tamanho(); } public boolean esta. Vazia() { return d. esta. Vazia(); } public void empilha (Object obj) { d. insere. Ultimo(obj); } 13

Implementação de Pilha com Deque public Object topo() throws Pilha. Vazia. Exception { try

Implementação de Pilha com Deque public Object topo() throws Pilha. Vazia. Exception { try { return d. ultimo(); } catch (Deque. Empty. Exception ece) { throw new Pilha. Vazia. Exception (“Pilha esta vazia!"); } } public Object desempilha() throws Pilha. Vazia. Exception { try { return d. remove. Ultimo(); } catch (Deque. Empty. Exception ece) { throw new Pilha. Vazia. Exception (" Pilha esta vazia!"); } } } 14

Padrão Adapter Interface Pilha Classe Deque. Stack Classe Deque 15

Padrão Adapter Interface Pilha Classe Deque. Stack Classe Deque 15

Padrão Abstract Factory 16

Padrão Abstract Factory 16

Padrão Abstract Factory - Criar. Fila - Criar. Pilha. Array Implem. Estatica Implem. Dinamica

Padrão Abstract Factory - Criar. Fila - Criar. Pilha. Array Implem. Estatica Implem. Dinamica Pilha. Din Fila. Array Fila. Din 17

Padrão Abstract Factory - Criar. Fila - Criar. Pilha. Array Implem. Estatica Implem. Dinamica

Padrão Abstract Factory - Criar. Fila - Criar. Pilha. Array Implem. Estatica Implem. Dinamica Pilha. Din Fila. Array Fila. Din 18