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.
Top comments (0)