![Page 1: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/1.jpg)
Estrutura de DadosFilas com lista encadeada
Prof. Adriano Teixeira de Souza
![Page 2: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/2.jpg)
Prof. Adriano Teixeira de Souza
Implementação de fila com lista
Utilizaremos também uma lista simplesmente encadeada para tal.
Como teremos que inserir e retirar elementos nas extremidades opostas da lista, que representarão o início e o fim da fila, teremos que usar dois ponteiros, ini e fim, que aprontam respectivamente para o primeiro e para o último elemento da fila.
ini fim
info1
info2
info3
info4
![Page 3: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/3.jpg)
Prof. Adriano Teixeira de Souza
Implementação da fila com lista
O nó da lista para armazenar valores reais pode ser dado por:
public class No {float info;No proximo;
}
A estrutura da fila agrupa os ponteiros para o início e o fim da lista:
public class Fila {No inicio;No fim;
}
![Page 4: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/4.jpg)
Prof. Adriano Teixeira de Souza
A função cria aloca a estrutura da fila e inicializa a lista como sendo vazia.
Filas :: Criação de uma fila
Fila cria(){Fila f = new Fila();f.inicio = null;f.fim = null;return f;
}
Fila cria(){Fila f = new Fila();f.inicio = null;f.fim = null;return f;
}
![Page 5: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/5.jpg)
Prof. Adriano Teixeira de Souza
Cada novo elemento é inserido no fim da lista e sempre retiramos o elemento do início da lista. Portanto, precisamos das funções:
Filas :: Funções Auxiliares
![Page 6: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/6.jpg)
Filas :: Funções Auxiliares/* função auxiliar: insere no fim */No ins_fim (No fim, float v) { No p = new No(); p.info = v; p.proximo = null; if (fim != null) // verifica se a lista não estava vazia fim.proximo = p; return p;
}
/* função auxiliar: retira do início */No ret_ini (No inicio) { No p = inicio.proximo; return p; }
/* função auxiliar: insere no fim */No ins_fim (No fim, float v) { No p = new No(); p.info = v; p.proximo = null; if (fim != null) // verifica se a lista não estava vazia fim.proximo = p; return p;
}
/* função auxiliar: retira do início */No ret_ini (No inicio) { No p = inicio.proximo; return p; }
![Page 7: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/7.jpg)
Prof. Adriano Teixeira de Souza
As funções que manipulam a fila fazem uso dessas funções de lista.
Note que a função de inserção deve atualizar ambos os ponteiros, ini e fim, quanto da inserção do primeiro elemento:
Filas :: Inserção de elemento
void insere (Fila f, float v) { f.fim = ins_fim(f.fim,v); if (f.inicio == null) // fila antes vazia? f.inicio = f.fim;}
void insere (Fila f, float v) { f.fim = ins_fim(f.fim,v); if (f.inicio == null) // fila antes vazia? f.inicio = f.fim;}
![Page 8: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/8.jpg)
Prof. Adriano Teixeira de Souza
A função de retirar deve atualizar ambos os ponteiros (ini e fim) se a fila tornar-se vazia após a remoção do elemento.
Filas :: Remoção de elemento
float retira (Fila f) { float v; if (vazia(f)) { System.out.println("Fila vazia."); System.exit(1); // aborta programa } v = f.inicio.info; f.inicio = ret_ini(f.inicio); if (f.inicio == null) // fila ficou vazia? f.fim = null; return v;}
float retira (Fila f) { float v; if (vazia(f)) { System.out.println("Fila vazia."); System.exit(1); // aborta programa } v = f.inicio.info; f.inicio = ret_ini(f.inicio); if (f.inicio == null) // fila ficou vazia? f.fim = null; return v;}
![Page 9: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/9.jpg)
Prof. Adriano Teixeira de Souza
A fila estará vazia se a lista estiver vazia:
Filas :: Funções Vazia e Libera
boolean vazia (Fila f){
return (f.inicio == null);}
boolean vazia (Fila f){
return (f.inicio == null);}
![Page 10: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/10.jpg)
Prof. Adriano Teixeira de Souza
Para testar o código, pode ser útil implementarmos um função que imprima os valores armazenados na fila. A ordem de impressão adotada é do início para o fim.
Filas :: Função Imprime
/* versão com lista*/void imprime (Fila f){ No q; for (q=f.inicio; q!=null; q=q.proximo){ System.out.println(q.info) ; }}
/* versão com lista*/void imprime (Fila f){ No q; for (q=f.inicio; q!=null; q=q.proximo){ System.out.println(q.info) ; }}
![Page 11: Estrutura de dados em Java - Filas com lista encadeada](https://reader035.vdocuments.com.br/reader035/viewer/2022071700/5563a55bd8b42aae0d8b4e53/html5/thumbnails/11.jpg)
Filas :: Exemplo de utilização
public static void main(String[] args) { ManipuladorFila manipulador = new ManipuladorFila(); Fila f = manipulador.cria(); manipulador.insere(f,20.0f); manipulador.insere(f,20.8f); manipulador.insere(f,20.2f); manipulador.insere(f,20.3f); manipulador.imprime(f); System.out.println("Primeiro elemento: "+
manipulador.retira(f)); System.out.println("Segundo elemento: "+
manipulador.retira(f)); System.out.println("Configuracao da fila:"); manipulador.imprime (f); f = null;}
public static void main(String[] args) { ManipuladorFila manipulador = new ManipuladorFila(); Fila f = manipulador.cria(); manipulador.insere(f,20.0f); manipulador.insere(f,20.8f); manipulador.insere(f,20.2f); manipulador.insere(f,20.3f); manipulador.imprime(f); System.out.println("Primeiro elemento: "+
manipulador.retira(f)); System.out.println("Segundo elemento: "+
manipulador.retira(f)); System.out.println("Configuracao da fila:"); manipulador.imprime (f); f = null;}