Estrutura de Dados - Duvidas com Deque

4 respostas
BinhoAraujo

Boa tarde,
tenho aqui algumas duvidas, quanto ao entendimento de Deque.
Deque tem alguns metodos como: addFirst(E e); addLast(E e); removeFirst(); removeLast();

addFirst - Insere o objeto passado na frente:

addFirst(5);

addFirst(7);

addFirst(0);

saída: [0][7][5] até ai tudo bem;

quando vou usar o addLast onde deve ser inserido? contanto que ja tenha isso: [0][7][5]

seria no fim do deque? [0][7][5] [insere aqui]

pesquisei alguns exemplos e so tenho esse retorno:

addFirst(5);

addFirst(7);

addFirst(0);

saída: [0][7][5]

quando uso o addLast me retorna isso:

addLast(20);

[20][0][7][5]

e assim por diante.

Está certo esse conceito?

4 Respostas

E

Use o método “escreva um pequeno programa” ou “escreva um Hello World”.
Rodando o seguinte programa, vi que você não entendeu direito o conceito de deque.
É mais simples que parece:

package guj;

import java.util.ArrayDeque;
import java.util.Deque;

public class TesteDeque {

    public static void main(String[] args) {
        Deque<Integer> deque = new ArrayDeque<Integer>();
        deque.addFirst(10); deque.addFirst(20); deque.addFirst(30);
        System.out.println (deque); // [30, 20, 10]
        deque.addLast(40); deque.addLast(50); deque.addLast(60);
        System.out.println (deque); // [30, 20, 10, 40, 50, 60]
    }
}
BinhoAraujo

Então o que eu entendi era pra ser isso mesmo que voce postou,
mas toda pesquisa que fiz foi adicionar First sempre para a esquerda, até ai tudo bem,
mas quando adiciono o Last ele sempre adiciona para a direita e inicia da primeira posição deque[0];

vou postar os metodos que encontrei:

deque.addFirst(4);
deque.addLast(3);
deque.addFirst(2);

saída: [3] [2] [4] onde o correto não seria: [3] [4] [2]

public DequeArray(Class<T> classe, int capacidade) { // Construtor
        this.capacidade = capacidade;
        deque = (T[]) Array.newInstance(classe, capacidade);
        
          frente = 0;
          fim = 0;  
        total = 0;

    }

    @Override
    public void addFirst(T elemento) {
        if (frente == 0)
            frente = capacidade;
        deque[--frente] = elemento;
        total++;


    }

    @Override
    public void addLast(T elemento) {
        if (fim == capacidade - 1)
            fim = -1;
        deque[++fim] = elemento;
        total++;

    }
E

Ah, mas é que você implementou “deque” como uma fila circular. Se fizer assim, você precisa implementar corretamente a parte da impressão da fila, que é onde você se estrepou.

BinhoAraujo

Então quer dizer que o erro está na impressão!? Vou tentar aqui ;)

Estou imprimindo de forma convencional:

public void imprimir() {

        if (isEmpty()) {
            System.out.println("deque vazio");
        }
        for (int i = 0; i < deque.length; i++) {
            if (deque[i] != null) {
                System.out.print("[" + deque[i] + "] ");
            }
        }
    }
Criado 24 de maio de 2013
Ultima resposta 25 de mai. de 2013
Respostas 4
Participantes 2