Anda di halaman 1dari 25

Estrutura de Dados

TAD Deque

Maikol M. Rodrigues
Turmas A e B (UNIFOR)

1

Fila de duas Extremidades (Deque)
Uma Deque suporta inserções e deleções de ambas as extremidades. 
The Deque Abstract Data Type
insertFirst(e): 
Inserção no início do deque.
insertLast(e):
Inserção no final do deque
removeFirst():
Remove e retorna o primeiro elemento
removeLast(): 
Remove e retorna o último elemento
  

Adicionamente pode­se acrescentar os seguintes métodos:
first()
  
last()
size()
isEmpty()

2

public boolean isEmpty(). public Object first() throws DequeEmptyException.  public Object last() throws DequeEmptyException.  public void insertLast(Object o).  } 3 .  public Object removeLast() throwsDequeEmptyException.Fila de duas Extremidades public interface Deque {   public int size().    public void insertFirst(Object o).    public Object removeFist() throwsDequeEmptyException.

  } }       4 .Fila de duas Extremidades public class DequeEmptyException extends  RuntimeException {     public DequeEmptyException(String err) {     super(err).

   •Para implementar o Deque utilizaremos uma lista duplamente  encadeada com dois nós SENTINELAS.Implementando Deque com Lista Duplamente Encadeada (LDE)    •Deleção do último elemento de uma lista simplesmente  encadeada não pode ser feito em tempo constante. 5 .

DLNode n) { element = e.Classe DLNode class DLNode { private Object element. DLNode p. private DLNode next. } 6 . DLNode() { this(null. next = n. null). prev. }       DLNode(Object e. null. prev = p.

} DLNode getPrev() { return prev. } Object getElement() { return element. } void setPrev(DLNode newPrev) { prev = newPrev.} void setNext(DLNode newNext) { next = newNext. } } 7 .Classe DLNode       void setElement(Object newElem){element = newElem. } DLNode getNext() { return next.

    trailer = new DLNode().  // sentinels   int size. // make trailer point to header     size = 0.    // number of elements   public MyDeque() {     header = new DLNode().setNext(trailer). trailer.Deque usando LDE public class MyDeque  implements Deque {   DLNode header.   } 8 .        header. // make header point to trailer       trailer.setPrev(header).

} public Object last() throws DequeEmptyException { if (isEmpty()) 9 .getNext(). } public Object first() throws DequeEmptyException { if (isEmpty())    throw new DequeEmptyException("Deque is empty.getElement().").Deque usando LDE public boolean isEmpty() { return (size==0). return header.

second).setNext(first). DLNode first = new DLNode(o.setPrev(first).getNext(). size++. } 10 . header.    header.Deque usando LDE public void insertFirst(Object o) { DLNode second = header. second.

").    DLNode last = trailer. size--.getPrev().getPrev().Deque usando LDE public Object removeLast() throws DequeEmptyException { if (isEmpty()) throw new DequeEmptyException("Deque is empty.getElement(). 11 .setPrev(secondtolast). Object o = last. trailer.setNext(trailer). secondtolast. DLNode secondtolast = last. return o.

1 .Deque usando LDE (removeLast) Aqui uma  visualização do  removeLast().

   3) 3) Reimplemente Reimplementeaa classe classe MyDeque MyDeque sem sem aa utilização utilização de de nós nós SENTINELAS. 13 . 2) 2) Implemente Implemente um um método método para para inverter inverterencapsuencapsulados lados na na classe classe MyDeque MyDeque usando usando as as operações operações básicas básicas do do Deque. SENTINELAS. Dados. Deque.Exercícios de Revisão 1) 1) Implemente Implemente um um método método para para inverter inverterencapsuencapsulados lados na na classe classe MyDeque MyDeque acessando acessando diretamente diretamente aa Estruturas Estruturas de de Dados.

SENTINELAS. 14 . MyDeque.    3) 3) Reimplemente Reimplemente aa classe classe MyDeque MyDeque usando usando uma uma Lista Lista Simplesmente Simplesmente Encadeada Encadeada sem sem aa utilização utilização de de nós nós SENTINELAS. Fila.Exercícios 1) 1) Implemente Implemente oo método método removeFirst() removeFirst() ee insertLast() insertLast() encapsulados encapsulados na na classe classe MyDeque. 2) 2) Utilizando Utilizando os os métodos métodos da da classe classe MyDeque MyDeque implemente implemente aa classe classe Pilha Pilha ee aa classe classe Fila.

nós.(CASA) (CASA) 6) 6)Descreva Descrevaem empseudocódigo pseudocódigoum ummétodo métodopara paraencontrar encontrar oonodo nododo domeio meiode deuma umaLDE LDEcom comsentinelas sentinelaseeum umnúmero número ímpar ímparde denós. contadores.       5) 5) Implemente Implemente oo TAD-Deque TAD-Deque usando usando vetor vetorde de tal tal forma forma que queoo primeiro primeiroelemento elemento sempre sempreseja seja oo da da posição posição 11 do do vetor.Não Nãouse usecontadores.Exercícios 4) 4) Programe Programe as as operações operações básicas básicas para para “deque”. encadeada. 15 . “deque”. na na representação representaçãopor porlista lista linear linearsimplesmente simplesmente encadeada. vetor.

DLNode last = new DLNode(o. ant. trailer).Deque usando LDE public void insertLast(Object o) { DLNode ant = trailer.setPrev(last).getPrev(). trailer.setNext(last). } 16 . size++.    ant.

"). Object o = first. DLNode second = first. second.setPrev(header). DLNode first = header.getNext(). size--.getNext().RemoveFirst public Object removeFirst() throws DequeEmptyException { if (isEmpty()) throw new DequeEmptyException("Deque is empty.setNext(second). 1 . header.getElement(). return o.

Implementação de Pilha e Fila com Deque Stacks with Deques: Queues with Deques: 1 .

 }   public boolean isEmpty() {     return D.   public DequeStack() {  D = new MyDeque().      }     public void push(Object obj) {     D.  }   public int size() {  return D.Implementação de Pilha com Deque public class DequeStack implements Stack {   private MyDeque D.isEmpty().   } 19 .insertLast(obj).size().

   }   }   public Object pop() throws StackEmptyException {        try {  return D.removeLast().  }     catch (DequeEmptyException e) {       throw new StackEmptyException("Stack is empty!"). }       catch (DequeEmptyException e) {       throw new StackEmptyException("Stack is empty!").Implementação de Pilha com Deque  public Object top() throws StackEmptyException {     try { return D. 20     } .last().

out.pop()  +  "\n"  +  A1.isEmpty()) System.push(new Integer(3)). A1.println("A Pilha esta VAZIA.pop()  +  "\n").pop()  +  "\n"  +  A1.       Character b = new Character('A').println(A1. ")..out.println("A Pilha esta VAZIA..    if (A1.push(b).       A1.  A1.isEmpty()) System.out.    Integer c = new Integer(9)...    }   21 .push(c).         System.     if (A1. ").Implementação de Pilha com Deque  public static void main(String args[]) {       }    DequeStack A1 = new DequeStack().

Use Use aa classe classe LinkedStack. elementos. Fila. LinkedStack.Exercícios 1) 1) Descreva Descreva um um algoritmo algoritmo recursivo recursivo para para contar contar oo número númerode de elementos elementos em em uma uma lista lista simplessimplesmente mente encadeada. 3) 3) Descreva Descreva um um algoritmo algoritmo recursivo recursivo para para para para determinar determinaroo maior maiorelemento elemento em em um um Arranjo ArranjoAA de de nn elementos. encadeada. (CASA) (CASA) 22 .       2) 2) Utilizando Utilizando os os métodos métodos da da classe classe MyDeque MyDeque implemente implemente aa classe classe Fila.

auxiliar.       5) 5) Refaça Refaça oo exercício exercício anterior anteriorusando usando uma uma Fila Fila como como ED ED auxiliar. Pilha.Refaça Refaçaooexercício exercíciopara pararetornar retornarnull null quando 23 quandooonúmero númerode deelementos elementosfor forpar. Pilha. par. nós. 6) 6)Descreva Descrevaem empseudocódigo pseudocódigoum ummétodo métodopara paraencontrar encontraroonodo nodo do domeio meiode deuma umaLDE LDEcom comsentinelas sentinelascom comum umnúmero númeroímpar ímparde de nós. contadores.Não Nãouse usecontadores.Refaça RefaçaUsando UsandoFila Filaem emvez vezda daPilha.Exercícios 4) 4)Implemente Implementeum ummétodo métodopara parainverter inverterum umDeque Dequeutilizando utilizando uma umaPilha PilhaAuxiliar.OBS:Você OBS:Vocêpoderá poderáutilizar utilizaras asOB OBde de Deque DequeeePilha. Auxiliar. .

referências. Não Nãoutilize utilizealocação alocaçãode dememória memóriaeenem nemED EDadicionais. S. Usando Usandoum umDeque Deque b. adicionais.    8) 8)Inverta Invertaaaordem ordemdos doselementos elementosna napilha pilhaS.b.Exercícios 7) 7)Inverta Invertauma umaPilha Pilhaimplementada implementadacom comuma umaLista Lista Simplesmente SimplesmenteEncadeada Encadeadautilizando utilizandoapenas apenasreferências. Usando Usandouma umapilha pilhaadicional adicionaleealgumas algumasvariáveis variáveisadicionais adicionais 24 .

int pos. else return maior(a. (pos+1). maior).length) return maior. a[pos]). }    25 . (pos+1). int maior) { if (pos == a. else if (a[pos] > maior) return maior(a.Exercícios public static int maior(int[] a.