DEV Community

Crie uma interface Queue

  • Criação de uma interface para filas de caracteres.

  • Três implementações a serem desenvolvidas:

  • Fila linear de tamanho fixo.

  • Fila circular (reutiliza o espaço do array).

  • Fila dinâmica (cresce conforme necessário).

1 Crie um arquivo chamado ICharQ.java
// Interface de fila de caracteres.
public interface ICharQ {
// Insere um caractere na fila.
void put(char ch);
// Remove um caractere da fila.
char get();
}

2 Crie um arquivo chamado IQDemo.java.

3 Comece a criar IQDemo.java adicionando a classe FixedQueue mostrada aqui:

Image description

4 Adicione a IQDemo.java a classe CircularQueue mostrada abaixo.

Image description

  • Funcionamento da Fila Circular: Reutiliza espaço liberado no array ao remover elementos.Pode armazenar um número ilimitado de elementos, desde que haja remoções.

  • Condições de Limite: A fila não está cheia quando o fim do array é alcançado, mas quando um item não removido é sobreposto por um novo.
    O método put() deve verificar várias condições para determinar se a fila está cheia.

  • Condições para a Fila Cheia: A fila está cheia se: putloc é uma unidade menor que getloc. putloc está no fim do array e getloc está no início.

  • Condição de Fila Vazia: A fila está vazia quando getloc e putloc são iguais.

  • Tamanho do Array: O array subjacente é criado com uma unidade a mais do que o tamanho da fila para facilitar as verificações.

5 Insira em IQDemo.java a classe DynQueue mostrada a seguir. Ela implementa uma fila “extensível” que expande seu tamanho quando o espaço acaba.

Image description

  • Nessa implementação de fila, quando a fila está cheia, uma tentativa de armazenar outro elemento faz um novo array subjacente duas vezes maior que o original ser alocado, o conteúdo atual da fila ser copiado nesse array e uma referência ao novo array ser armazenada em q.

6 Para demonstrar as três implementações de ICharQ, insira a classe a seguir em IQDemo.java. Ela usa uma referência de ICharQ para acessar todas as filas.

class IQDemo {
public static void main(String args[]) {
FixedQueue q1 = new FixedQueue(10);
DynQueue q2 = new DynQueue(5);
CircularQueue q3 = new CircularQueue(10);
ICharQ iQ;
char ch;
int i;
iQ = q1;
// Insere alguns caracteres na fila fixa.
for(i=0; i < 10; i++)
iQ.put((char) ('A' + i));
// Exibe a fila.
System.out.print("Contents of fixed queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
iQ = q2;
// Insere alguns caracteres na fila dinâmica.
for(i=0; i < 10; i++)
iQ.put((char) ('Z' - i));
// Exibe a fila.
System.out.print("Contents of dynamic queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
iQ = q3;
// Insere alguns caracteres na fila circular.
for(i=0; i < 10; i++)
iQ.put((char) ('A' + i));
// Exibe a fila.
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
// Insere mais caracteres na fila circular.
for(i=10; i < 20; i++)
iQ.put((char) ('A' + i));
// Exibe a fila.
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println("\nStore and consume from" +
" circular queue.");
// Armazena e consome itens da fila circular.
for(i=0; i < 20; i++) {
iQ.put((char) ('A' + i));
ch = iQ.get();
System.out.print(ch);
}
}
}

7 Crie uma versão circular de DynQueue. Adicione a ICharQ um método reset( ) que rede fina a fila. Crie um método static que copie o conteúdo de um tipo de fila para outro.

Top comments (0)