Sunteți pe pagina 1din 4

11/10/2018

Filas (modelo conceitual)

ALGESD 07 Store Retrieve

Filas
Prof. Dr. Marcelo Duduchi

Listas Lineares Filas (representação gráfica)


 Vimos anteriormente o conceito de listas
lineares e mostramos que tanto as pilhas
quanto as filas são listas lineares restritas;
 Vimos que as pilhas caracterizam-se pela
dinâmica em que o último elemento que
entra é o primeiro a sair;
 Conheceremos agora as filas...

Filas Filas (representação gráfica)


 Uma lista linear onde a entrada é feita por uma
extremidade e a saída é feita pela outra
extremidade é conhecida como fila;
 Neste caso o primeiro elemento a entrar é o
primeiro elemento a sair (First In First Out);
 Existem duas funções que se aplicam a todas
as filas:
 STORE, que insere um dado no final da fila;
 RETRIEVE, que remove o item do início da fila;

1
11/10/2018

Filas (implementação) Filas (implementação)


 Estaremos optando por  A condição de fila vazia
implementar uma fila circular acontece quando front é igual a
que é mais eficiente que a fila rear;
onde “empurramos” os
elementos para as posições  A condição de fila cheia
iniciais do vetor; acontece quando o “próximo de
 Na fila circular tanto o front rear” for igual a front
quanto o rear caminham em  Uma das possíveis saídas para
direção ao final do vetor porém, fila cheia ser diferente de fila
ao chegar no final consideramos vazia;
que voltamos ao início dele de
forma “circular”;  Por conta disto um elemento
do vetor é “sacrificado”;

Filas (implementação) Filas (implementação)


 Na Inclusão colocamos o elemento na  Consideremos para a nossa implementação um
grupo de operações:
posição do rear e ele vai para a próxima
 NEXT: indica quem é o próximo elemento;
posição; front front
 ISEMPTY: verifica se está vazia;

A A  ISFULL: verifica se está cheia;


8 1
B
8 1
B  STORE: coloca um elemento;
7 2 7 2
6 3 6 3  RETRIEVE: retira um elemento;
rear C
5 4 5 4
 DESTROY: retira todos os elementos;
C rear
store (“C”,fl);

Filas (implementação) Filas (Dados e construtores)


public class FilaChar {
private int tamanho, front, rear;
 Na retirada retornamos o elemento que private char vet[];
está no front e ele vai para a próxima FilaChar(){
tamanho = 5;
posição; front vet = new char[5];
A front = 0;
A front rear = 0;
8 1 8 1 }
B B
7 2 7 2
FilaChar(int n) {
6 3 C 6 3 C tamanho = n;
5 4 5 4 vet = new char[tamanho];
front = 0;
rear = 0;
rear rear }
...
retrieve (fl);

2
11/10/2018

Filas (Next) Filas (destroy)


... int next(int n) { ...
if(n == tamanho-1)
return 0; void destroy(){
else front = rear;
return n+1; }
}
... }

A rotina Next é a responsável por controlar quem


é o próximo tanto para rear quanto para front;
Pode ser substituída por: (n+1)%(tamanho);

Filas (Isfull e Store) Filas (exemplo de utilização 1)


public static void main(String[] args) {
... boolean isfull(){ System.out.println("criando fila com 10 elementos...");
if (next(rear) == front) FilaChar f1 = new FilaChar(10);
System.out.println("verificando status inicial da fila...");
return true; System.out.println("está vazia? "+f1.isempty());
else System.out.println("está cheia? "+f1.isfull());
return false; System.out.println("incluindo o caractere A...");
f1.store('A');
} System.out.println("verificando status da fila...");
System.out.println("está vazia? "+f1.isempty());
void store(char elem){ System.out.println("está cheia? "+f1.isfull());
System.out.println("incluindo o caractere B...");
if(isfull()){ f1.store('B');
System.out.println("Overflow!"); System.out.println("incluindo o caractere C...");
System.exit(1); f1.store('C');
System.out.println("realizando 3 retrieves na seqüência...");
} System.out.println(f1.retrieve());
else System.out.println(f1.retrieve());
vet[rear]=elem; System.out.println(f1.retrieve());
System.out.println("verificando status da fila...");
rear = next(rear); System.out.println("está vazia? "+f1.isempty());
} ... System.out.println("está cheia? "+f1.isfull());
}

Filas (Isempty e Retrieve) Filas (exemplo de utilização 2)


... boolean isempty(){ public static void main(String[] args) {
if (rear == front) System.out.println("criando string FILA...");
return true; String palavra="FILA";
else System.out.println("criando uma fila com tamanho do string...");
return false; FilaChar f2 = new FilaChar(palavra.length()+1);
System.out.println("incluindo os caracteres do string na fila...");
} char aux;
for(int i=0;i<palavra.length();i++){
char retrieve(){ aux=palavra.charAt(i);
if(isempty()){ f2.store(aux);
}
System.out.println("Underflow!"); System.out.println("verificando status da fila...");
System.exit(1); System.out.println("está vazia? "+f2.isempty());
//return '*'; System.out.println("está cheia? "+f2.isfull());
} System.out.println("retirando chars da fila até esvaziar...");
while(f2.isempty()==false)
//else System.out.print(f2.retrieve());
char aux = vet[front]; System.out.println("");
front = next(front); System.out.println("verificando status da fila...");
return aux; System.out.println("está vazia? "+f2.isempty());
System.out.println("está cheia? "+f2.isfull());
} ... }

3
11/10/2018

Filas (aplicações)
 Todo buffer funciona como uma fila pois
os primeiros caracteres que vão para o
buffer são os primeiros a sair;
 As filas também são bastante usadas para
a simulação de filas de espera do mundo
real como caixas em banco, etc.
 Uma aplicação interessante de filas é a
coloração de regiões.

S-ar putea să vă placă și