Primeiro precisamos entender.O que são as estruturas dinamica ?
As estruturas dinamicas tem a capacidade de aumento de acordo com o decorrer da aplicação , neste tipo de estrutura não é atribuito um final, pois seu tamanho limite é a capacidade de memoria , onde é muito dificil ocupa-lá totalmente.As estruturas mais utilizadas são as filas , pilhas , listas , tabelas de espalhamento e arvorés, neste artigo explicarei um tipo muito peculiar de estrutura a fila circular dinamica.
Antes de começar a falar sobre fila circular dinamica , devemos saber o que é uma fila em si. São estruturas seguem a politica de FIFO (First in , First out ) ou seja primeiro a entrar é o primeiro a sair , um exemplo classico é uma fila de banco , a primeira pessoa que chegou na fila será atendida e sairá do banco e assim por diante ou sejá nunca vai acontecer de cortarem sua vez.
Qual a diferença de uma fila dinamica e uma fila circular dinamica ?
Resposta : no caso da fila dinamica perdemos os dados quando removidos , por outro lado na fila circular dinamica não temos este problema pois não ocorre a perca dos dados , apenas são alterados os indicadores de inicio e fim da fila. Apenas são realocados os ponteiros.
Nós precisamos da uma classe Nó ,porém o que seria esta classe nó ?
Classe nó , funciona como uma especie de "caixa" , onde colocamos conteudo(podendo ser um objeto ou uma variavel) e apontamos para o proximo conteudo,fazemos uma especie de amarração dos dados para podermos percorre-los .
Neste exemplo usarei a classe nó com os atributos publicos para facilitar o entendimento.
Atributos e Metodos
public int dado - levaremos em consideração somentes dados inteiros positivos
public NoFila proximo - aponta para o proximo conteudo da fila.
(Construtor) - public NoFila( int dado) - neste metodo construtor iremos iniciar o dado sempre com o argumento recebido e campo proximo como nulo.
Listagem 1 - como fazer a criação da classe Nó
public class NoFilaCircular {
public NoFilaCircular proximo;
public NoFilaCircular(int dado){
Quais metodos são necessarios na classe FilaCircularDinamica?
public boolean vazia() - se necessario deve ser utilizado para verificar se a lista esta vazia ou não , se estiver vazia o retorno é verdadeiro , caso contrario falso.
Listagem 2 - Verifica se a lista esta faziia através do inicio e fim
return inicio == null && fim == null;
public void adicionarFinal(int dado) - metodo responsavel pela adição de elementos na lista , se a lista estiver vazia ele apenas coloca o fim e o inicio apontados na mesma posição , caso contrario tem que inserir o novo na ultima posição e alterar o indicador.
Listagem 3 - Metodo para adicionar item na lista .
public void adicionarFila(int dado) {
NoFilaCircular novo = new NoFilaCircular(dado);
fim.proximo = inicio;
novo.proximo = inicio;
public int removerInicio() - remoção do inicio da lista retornando o valor removido (neste caso um inteiro, porém dependendo da sua aplicação pode ser alterado).
Listagem 4 - Demonstração da remoção de itens da lista
public int removerFila() {
removido = -1;
} else if (inicio == fim) {
removido = inicio.dado;
inicio = inicio.proximo;
toString() - metodo responsavel pela formatação de Strings no java , (você necessida adicionar Override - sobrescrever), se você não tiver familiaridade com a tecnologia java pode alterar a assinatura e colocar, por exemplo: public String listar()
Listagem 5 - Mostra onde realmente a magica acontece, vai listar a lista do inicio ao fim e do fim ao inicio.