Crie uma interface Queue
Java para Iniciantes (Oracle)
Posted on October 1, 2024
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:
4 Adicione a IQDemo.java a classe CircularQueue mostrada abaixo.
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.
- 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.
Posted on October 1, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024