Métodos para implementar filas de loop usando Java:
1. Adicione um tamanho de atributo para registrar o número de elementos atualmente.
O objetivo é quando a cabeça = traseira. Por tamanho = 0 ou tamanho = comprimento da matriz. Para distinguir a fila como vazia, ou a fila está cheia.
2. Somente o tamanho do tamanho da matriz é armazenado na matriz, garantindo que a traseira não seja igual à cabeça depois de girar. É quando a fila está cheia. traseiro+1 = cabeça, há apenas um elemento no meio.
Quando traseiro = cabeça. A fila deve estar vazia.
Os tipos de operações acordadas nas duas extremidades da fila são diferentes:
O fim que pode ser excluído é chamado de chefe da equipe, e essa operação também é chamada de Dequeue;
O fim que pode ser inserido é chamado de cauda da equipe, e essa operação também é chamada de Enqueue.
Diagrama esquemático da fila
Ao implementar uma fila, você deve prestar atenção ao fenômeno de falsflow. Como mostrado na última imagem acima.
Overflow falso como visto na figura
Solução: use armazenamento em cadeia, o que obviamente pode. Quando armazenado sequencialmente. Nossa solução comum é conectá -lo ao final e formar uma fila circular. Isso faz pleno uso do espaço de armazenamento da fila.
Diagrama da fila de loop:
Na foto acima. Front aponta para o primeiro elemento na fila. Pontos traseiros para a próxima posição no final da fila.
Mas ainda há um problema: quando o ponto dianteiro e traseiro para a mesma posição, isso significa que a equipe está vazia ou cheia? Você pode imaginar essa situação.
Práticas comuns para resolver esse problema são a seguinte:
Uma marca é usada para distinguir essas situações confusas.
Sacrificar um espaço elementar. Quando a frente e a traseira são iguais, eles estão vazios. Quando a próxima posição da parte traseira está na frente. Está cheio.
Por exemplo, a figura a seguir:
Abaixo, damos a fila de loop e usamos de outra maneira, ou seja, sacrificar um espaço de elemento para distinguir entre equipes vazias e completas.
Vários pontos -chave:
1. Pontos frontais para o chefe da equipe. traseiro aponta para a próxima posição no final da equipe.
2. Inferência de que a equipe está vazia: front == traseiro; Inferência de que a equipe está cheia: (traseira+1)%maxSize == FRONT.
importar java.io.*; classe pública queuearray {objeto [] a; // Matriz de objetos, a fila armazena até A.Length-1 Object Int Front; // da primeira traseira do subscrito int; // do final subscrito public queuearray () {this (10); // Ligue para outros construtores} public queuearray (int size) {a = new Object [size]; front = 0; traseiro = 0; } / *** Anexar um objeto ao final da fila* @param obj objeto* @return retornar false quando a fila estiver cheia, caso contrário, verdadeiro* / public boolean engeue (objeto obj) {if ((traseiro+1)%A.Length == FRONT) {return false; } a [traseira] = obj; traseiro = (traseiro+1)%A. comprimento; retornar true; } / *** O primeiro objeto na cabeça da fila é Dequeed* @Return O objeto Dequeed quando a fila está vazia* / public objeto dequeue () {if (traseiro == front) {return null; } Objeto obj = a [front]; front = (front+1)%A. comprimento; retornar obj; } public static void main (string [] args) {queuearray q = new Queuearray (4); System.out.println (Q.enqueue ("Zhang San")); System.out.println (q.enqueue ("li si")); System.out.println (q.enqueue ("zhao wu")); System.out.println (q.enqueue ("wang yi")); // não pode entrar na fila, a fila está cheia para (int i = 0; i <4; i ++) {System.out.println (q.dequeue ()); }}}O resumo acima dos dois métodos de implementação de filas circulares com base nas matrizes Java é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.