tipos especiais de listas pilha fila deque. prof. mateus raeder - programação ii2 tipos especiais...

49
Tipos Especiais de Listas Pilha Fila Deque

Upload: internet

Post on 22-Apr-2015

106 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Tipos Especiais de Listas

PilhaFila

Deque

Page 2: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 2

Tipos especiais de listas

• O armazenamento seqüencial (estático) é útil quando as estruturas sofrem poucas remoções ou inserções ou ainda quando inserções e remoções não acarretam grande movimentação de nós– Não é bem o caso da implementação de lista que

permite remover e inserir um elemento em qualquer posição da lista...

– Por isso, o armazenamento seqüencial é mais usado para implementar os tipos especiais de listas:

• Filas (Queue em inglês), • Pilhas (Stack em inglês) e • Deques (Deque em inglês)

• São mais ferramentas do programador do que estruturas de armazenamento.

Page 3: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Pilha(Stack)

Prof. Mateus Raeder - Programação II 3

Page 4: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 4

Pilhas (stack)

• Os elementos são inseridos e removidos sempre em uma extremidade (a final) chamada de topo da pilha.

• Contém um ponteiro (variável) que marca o topo da pilha.

• Implementa norma: LIFO (last-in, first-out)– último a entrar, primeiro a sair.

• Pilha Vazia: topo=-15

4

3

2

1

0 17

push (17)Inserção de 17 no topo da pilha

topo

Page 5: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Pilhas (Stack)

• Operações sobre Pilhas:

•Verificar se a pilha está vazia•Verificar se a pilha está cheia•Inserir um elemento no topo da

pilha•Remover um elemento do topo da

pilha•Inspecionar o elemento do topo da

pilha

Prof. Mateus Raeder - Programação II 5

Page 6: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 6

Pilhas

5

4

3

2

1

0 17

push (17)Inserção de 17 no topo da pilha

top

Page 7: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 7

5

4

3

2

1

0 17

push(5)Inserção de 5 no topo da pilha

5

5

4

3

2

1

0 17

pop()Remoção (sempre no topo da pilha)

top

top

Page 8: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 8

5

4

3

2

1

0 17

push(123)Inserção de 123 no topo da pilha

123

5

4

3

2

1

0 17

push(25)Inserção de 25 no topo da pilha

123

25

top

top

Page 9: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 9

5

4

3

2

1

0 17

push(12)Inserção de 12 no topo da pilha

123

5

4

3

2

1

0 17

pop()Remoção (sempre no topo da pilha)

123

25

25

12 top

top

Page 10: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 10

• Estouro de pilhas:– Estouro negativo (underflow): pilha vazia sofre

operação de extração– Estouro positivo (overflow): quando a inserção de

um elemento excede a capacidade total da pilha.

Page 11: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 11

Interface Stack<E>

public interface Stack<E> {

/** Return the number of elements in the stack. */ public int size();

/** Return whether the stack is empty. */public boolean isEmpty();

/** Inspect the element at the top of the stack.*/ public E top() throws EmptyStackException; /**Insert an element at the top of the stack.*/

public void push (E element); /** Remove the top element from the stack.*/

public E pop() throws EmptyStackException; }

Page 12: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Estouro da Pilha

Prof. Mateus Raeder - Programação II 12

public class EmptyStackException extends RuntimeException { public EmptyStackException(String err) { super(err); }}

public class FullStackException extends RuntimeException { public FullStackException(String err) { super(err); }}

Page 13: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 13

Classe ArrayStack

public class ArrayStack<E> implements Stack<E> {

// Capacity of the stack arrayprotected int capacity;

// default array capacitypublic static final int CAPACITY = 1000;

// Generic array used to implement the stack protected E S[]; // index for the top of the stack protected int top = -1;

/**Initializes the stack to use an array of default length.*/ public ArrayStack() { this(CAPACITY); // default capacity }

Page 14: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Classe ArrayStack (cont.)

/** Initializes the stack to use an array of given length.*/ public ArrayStack(int cap) { capacity = cap; S = (E[]) new Object[capacity]; }

/**Returns the number of elements in the stack. */ public int size() { return (top + 1); }

/**Testes whether the stack is empty. */ public boolean isEmpty() { return (top < 0); }

Prof. Mateus Raeder - Programação II 14

Page 15: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 15

/** Inserts an element at the top of the stack. */ public void push(E element) throws FullStackException { if (size() == capacity) throw new FullStackException("Stack is full."); S[++top] = element; }

/** Inspects the element at the top of the stack. */ public E top() throws EmptyStackException { if (isEmpty()) throw new EmptyStackException("Stack is empty."); return S[top]; }

Classe ArrayStack (cont.)

Page 16: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 16

Classe ArrayStack (cont.)

/** Removes the top element from the stack. */

public E pop() throws EmptyStackException { E element; if (isEmpty()) throw new EmptyStackException("Stack is empty."); element = S[top]; S[top--] = null; // dereference S[top] for garbage collection. return element; }}

Page 17: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Testando a Pilha

Prof. Mateus Raeder - Programação II 17

public class ArrayStackTest {public static void main(String[] args) {

ArrayStack<Integer> s = new ArrayStack<Integer>(10);try{

s.push(1);s.push(2);s.push(3);s.push(4);s.push(5);

} catch(FullStackException e) {System.out.println(e);

}

try{while (!s.isEmpty()) {

System.out.println(s.pop());}

}catch(EmptyStackException e){

System.out.println(e);}

}}

Page 18: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Fila(Queue)

Prof. Mateus Raeder - Programação II 18

Page 19: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 19

Filas (Queue)

• Elementos são inseridos no fim da fila e retirados do início da fila.

• Geralmente, a implementação, contém 2 ponteiros (variáveis):– Um ponteiro para o início da fila (first)– Um ponteiro para o fim da fila (last)

• FIFO (first-int, first-out)– primeiro a entrar, primeiro a sair

• Fila vazia:– Quando last==first-1;

Underflow: fila vazia sofre operação de extração

Overflow: quando a inserção de um elemento excede a capacidade total da fila.

1 2 3 4 5 6 7

Page 20: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Operações sobre Filas (Queue)

•Verificar se a fila está vazia•Inserir um elemento no final da fila•Remover e retornar o elemento do

inicio da fila•Consultar o elemento do inicio da fila•Obter o tamanho da fila

Prof. Mateus Raeder - Programação II 20

Page 21: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 21

Filas

0 1 2 3 4 5 0 1 2 3 4 5

25

Início: Fila vaziaenqueue (25)Inserção de 25 na Fila

last

first

last

first

Page 22: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 22

Filas

0 1 2 3 4 5

2590

0 1 2 3 4 5

25 90 8

enqueue(90)Inserção de 90 na fila

enqueue(8)Inserção de 8 na fila

0 1 2 3 4 5

90 8 dequeue()Remoção na fila

last

first

first

last

first

last

Page 23: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 23

Fila

0 1 2 3 4 5

90 8enqueue(15)Inserção de 15 na fila15

0 1 2 3 4 5

8dequeue()Remoção15

0 1 2 3 4 5

dequeue()Remoção15

first

last

first

first

last

last

Page 24: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 24

Fila

0 1 2 3 4 5 dequeue()Remoção

first

last

25

Fila está cheia???

Page 25: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 25

Interface Queue

public interface Queue<E> {

/** Returns the number of elements in the queue.*/ public int size(); /** Returns whether the queue is empty. */ public boolean isEmpty(); /** Inspects the element at the front of the queue.*/ public E front() throws EmptyQueueException; /** Inserts an element at the rear of the queue. */ public void enqueue (E element); /** Removes the element at the front of the queue.*/ public E dequeue() throws EmptyQueueException; }

Page 26: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 26

Classe Queue

public class ArrayQueue<E> implements Queue<E> {

// The actual capacity of the queue arrayprotected int capacity;

//Index to the first elementprotected int first = 0;

//Index to the last elementprotected int last = -1;

// default array capacitypublic static final int CAPACITY = 1000;

// Generic array used to implement the queue protected E Q[];

Page 27: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Classe Queue (cont.)

Prof. Mateus Raeder - Programação II 27

/**Initializes the queue to use an array of default length. */public ArrayQueue() {

this(CAPACITY);}

/** Initializes the queue to use an array of given length. */public ArrayQueue(int cap){

capacity = cap;Q = (E[]) new Object[capacity];

}

/** Testes whether the queue is empty. */public boolean isEmpty() {

return (last == (first -1));}

Page 28: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 28

Classe Queue (cont.)

/** Testes whether the queue is empty. */public boolean isEmpty() {

return (last == (first -1));}

/** Returns the number of elements in the queue. */public int size() {

return ((last - first) + 1);}

/** Removes and return the element at the front of the queue.*/public E dequeue() throws EmptyQueueException {

if (isEmpty()) {throw new EmptyQueueException("Queue is empty.");

}E temp = Q[first];first++;return temp;

}

Page 29: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Classe Queue (cont.)

/** Inserts an element at the rear of the queue. */public void enqueue(E element) throws FullQueueException {

if (last == Q.length -1) {throw new FullQueueException("Queue is full.");

}last++;Q[last] = element;

}

/** Inspects the element at the front of the queue.*/public E front() throws EmptyQueueException {

if (isEmpty()) {throw new EmptyQueueException("Queue is empty.");

}return Q[first];

}}

Prof. Mateus Raeder - Programação II 29

Page 30: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Classes de Exceção

Prof. Mateus Raeder - Programação II 30

public class FullQueueException extends RuntimeException {public FullQueueException(String err) { super(err); }

}

public class EmptyQueueException extends RuntimeException { public EmptyQueueException(String err) { super(err); }}

Page 31: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Testando a Fila

Prof. Mateus Raeder - Programação II 31

public class ArrayQueueTest {public static void main(String[] args) {

ArrayQueue<Integer> q = new ArrayQueue<Integer>(5);try{

q.enqueue(1);q.enqueue(2);q.enqueue(3);q.enqueue(4);q.enqueue(5);System.out.println(q);

}catch(FullQueueException e) {System.out.println(e);

}

try{while (!q.isEmpty()){

System.out.println(q.dequeue());}

}catch(EmptyQueueException e) {

System.out.println(e);}

}}

Page 32: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Fila Circular(Circular Queue)

Prof. Mateus Raeder - Programação II 32

Page 33: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Fila com implementação circular

• Na implementação anterior, observamos que a fila pode ser considerada como cheia, mesmo não contendo nenhum elemento.

• Isso se deve a forma como lidamos com os índices que controlam o início e final da fila.

• Uma solução para esse problema é trabalhar com filas circulares.

0 1 2 3 4 5

início da filafim da fila

90 12 117

Prof. Mateus Raeder - Programação II 33

Page 34: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 34

Fila com Implementação Circular

0 1 2 3 4 5

fila vazia first==-1

0 1 2 3 4 5

90 12 117

fila cheia first==last+1 oufirst==0 && last==array.length-1

firstlast

Page 35: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 35

Classe ArrayCircularQueue

public class ArrayCircularQueue<E> implements Queue<E>{

// The actual capacity of the queue arrayprotected int capacity;

//Index to the first elementprotected int first = -1;

//Index to the last elementprotected int last = -1;

// default array capacitypublic static final int CAPACITY = 1000;

// Generic array used to implement the queue protected E Q[];

/**Initializes the queue to use an array of default length. */public ArrayCircularQueue() {

this(CAPACITY);}

Page 36: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 36

Classe ArrayCircularQueue (cont.)

/** Initializes the queue to use an array of given length. */public ArrayCircularQueue(int cap){

capacity = cap;Q = (E[]) new Object[capacity];

}

/** Testes whether the queue is empty. */public boolean isEmpty() {

if (first == -1) {return true;

}else {

return false;}

}

Page 37: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 37

Classe ArrayCircularQueue (cont.)

/** Returns the number of elements in the queue. */public int size() {

if (first > last) {return (Q.length - first) + (last + 1);

}else {

return (last - first + 1);}

}

/** Inspects the element at the front of the queue.*/public E front() throws EmptyQueueException {

if (isEmpty()) throw new EmptyQueueException("Queue is empty.");

return Q[first];}

Page 38: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 38

Classe ArrayCircularQueue (cont.)

/** Inserts an element at the rear of the queue. */public void enqueue(E element) throws FullQueueException {

if ((first == 0 && last == Q.length -1) ||(first == last + 1)) {

throw new FullQueueException("Queue is full");}else {

if ((last == Q.length -1) || (last == -1)) {last = 0;Q[last] = element;if (first == -1) {

first = 0;}

}else {

Q[++last] = element;}

}}

Page 39: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 39

Classe ArrayCircularQueue (cont.)

/** Removes and return the element at the front of the queue.*/public E dequeue() throws EmptyQueueException {

if (isEmpty()) {throw new EmptyQueueException("Queue is Empty.");

}

E element = Q[first];

if (first == last) { //Queue contains only one elementfirst = last = -1;

}else if (first == Q.length -1){

first = 0;}else{

first++;}return element;

}}

Page 40: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 40

Testando a Fila Circular

public class ArrayCircularQueueTest {public static void main(String[] args) {

ArrayCircularQueue<Integer> q = new ArrayCircularQueue<Integer>(5);try{

q.enqueue(1);q.enqueue(2);q.enqueue(3);q.enqueue(4);

q.dequeue();q.dequeue();

q.enqueue(5);q.enqueue(6);q.enqueue(7);

} catch(FullQueueException e) {System.out.println(e);

}catch(EmptyQueueException e) {

System.out.println(e);}

}}

Page 41: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Exercício

• Implemente métodos para exibir o conteúdo da fila circular de 2 maneiras:1. No método main, faça o código necessário para que

enquanto a fila não for vazia, esvazie a fila, exibindo os elementos retirados.

2. Crie um método print na classe CircularQueue que exiba o conteúdo da fila na ordem em que foram inseridos

Prof. Mateus Raeder - Programação II 41

Page 42: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Deque(Deque)

Prof. Mateus Raeder - Programação II 43

Page 43: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

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).

1 2 3 4 5 6 7

Prof. Mateus Raeder - Programação II 44

Page 44: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Operações sobre Deques

• Verificar se o deque está vazio• Verificar se o deque está cheio• Inserir um elemento na inicio do deque• Inserir um elemento no final do deque • Remover um elemento do inicio do

deque• Remover um elemento do final do deque• Retornar (sem remover) o primeiro

elemento do deque• Retornar (sem remover) o último

elemento do deque

Prof. Mateus Raeder - Programação II 45

Page 45: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 46

Interface Deque

public interface Deque<E> { /** Returns the number of elements in the deque.*/ public int size(); /** Returns whether the deque is empty.*/ public boolean isEmpty(); /** Returns the first element; an exception is thrown if deque is empty.*/ public E getFirst() throws EmptyDequeException; /**Returns the last element; an exception is thrown if deque is empty.*/ public E getLast() throws EmptyDequeException; /**Inserts an element to be the first in the deque.*/ public void addFirst (E element); /**Inserts an element to be the last in the deque.*/ public void addLast (E element); /** Removes the first element; an exception is thrown if deque is empty.*/ public E removeFirst() throws EmptyDequeException; /** Removes the last element; an exception is thrown if deque is empty.*/ public E removeLast() throws EmptyDequeException;}

Page 46: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 47

Classe ArrayDeque

public class ArrayDeque<E> extends ArrayQueue<E> implements Deque<E> {

/**Initializes the deque to use an array of default length. */public ArrayDeque(){

super();}

/** Initializes the deque to use an array of given length. */public ArrayDeque(int cap) {

super(cap);}

/**Inserts an element to be the first in the deque.*/public void addFirst(E element) throws FullDequeException{

if (last == Q.length -1) {throw new FullDequeException("Deque is full.");

}System.arraycopy(Q, first, Q, first + 1, last - first + 1);Q[first] = element;last++;

}

Page 47: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 48

Classe ArrayDeque (cont.)

/**Inserts an element to be the last in the deque.*/public void addLast(E element) throws FullDequeException{

try{enqueue(element);

} catch(FullQueueException e){throw new FullDequeException("Deque is full.");

}}

/** Returns the first element; an exception is thrown if deque is empty.*/public E getFirst() throws EmptyDequeException {

return super.front();}

/**Returns the last element; an exception is thrown if deque is empty.*/public E getLast() throws EmptyDequeException {

if (isEmpty()){throw new EmptyDequeException("Deque is empty.");

}return Q[last];

}

Page 48: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Prof. Mateus Raeder - Programação II 49

Classe ArrayDeque (cont.)

/** Removes the first element; an exception is thrown if deque is empty.*/public E removeFirst() throws EmptyDequeException {

return dequeue();}

/** Removes the last element; an exception is thrown if deque is empty.*/public E removeLast() throws EmptyDequeException {

if (isEmpty()) {throw new EmptyDequeException("Deque is Empty.");

}return Q[last--];

}

}

Page 49: Tipos Especiais de Listas Pilha Fila Deque. Prof. Mateus Raeder - Programação II2 Tipos especiais de listas O armazenamento seqüencial (estático) é útil

Testando a classe ArrayDeque

Prof. Mateus Raeder - Programação II 50

public class ArrayDequeTest {public static void main(String[] args) {

ArrayDeque<Integer> d = new ArrayDeque<Integer>();try{

d.addLast(1);d.addFirst(2);d.addLast(3);d.addFirst(4);

System.out.println(d.removeFirst());System.out.println(d.removeLast());System.out.println(d.removeFirst());System.out.println(d.removeLast());

}catch(FullDequeException e) {

System.out.println(e);}catch (EmptyDequeException e){

System.out.println(e);}

}}