Assunto5 Filas Encadeadas
Assunto5 Filas Encadeadas
Assunto5 Filas Encadeadas
Filas Encadeadas
Códigos de Alta Performance
1
Definição
início ...
E0 E1 En-1 final
2
Operações com Fila
• init():
– inicia a fila deixando-a vazia;
• isEmpty():
– verifica se a fila está vazia, retornando verdade se estiver
vazia e falso, caso contrário;
• enqueue(valor):
– insere um elemento em apenas uma extremidade da fila
(final da fila);
• valor = dequeue():
– remove um elemento em apenas uma extremidade da
fila (início da fila);
• valor = first() :
– lê o elemento que está no início da fila e armazena em valor;
3
Definição do Tipo de Dado Fila
• A definição do tipo de dado fila utilizando alocação dinâmica
deve-se, da mesma forma que para lista encadeada, definir o
nó.
• Assim, como TAD (tipo abstrato de dado):
NO
{
dado: tipo_do_elemento da
FILA
prox: ponteiro para NO
} Último a ser
Primeiro a ser atendido
atendido
4
Definição do Tipo de Dado Fila
• Em JAVA:
private class NO {
int dado; //supondo fila armazena valor inteiro
NO prox;
}
5
Definição do Tipo de Dado Fila
Último a ser
Primeiro a ser atendido
atendido
6
Fila Encadeada: init
Módulo init()
{
ini = NULO
fim = NULO
}
7
Implementação em JAVA: init
8
Fila Encadeada: IsEmpty
• Verifica se a fila está vazia.
– Retorna verdade se estiver vazia
– falso caso contrário.
modulo IsEmpty()
{
se (ini == NULO) e (fim == NULO) então
retorna(verdade)
senão
retorna(falso)
}
9
Fila Encadeada: enqueue
10
Fila Encadeada: enqueue
modulo enqueue(elem)
{
novo: referência para nó
novo = ALOCA nó
novo.dado = elem
novo.prox = NULO
se (isEmpty() == verdade)
ini = novo
senão
fim.prox = novo
fim = novo
11
Exemplo de Inserção na Fila Encadeada
Supondo que a fila está vazia (os ponteiros ini e fim estariam apontando para NULO).
Depois de alocar um novo nó fazendo ser referenciado por novo:
novo = ALOCA nó
12
Exemplo de Inserção na Fila Encadeada (cont)
Finalmente, posicionando os ponteiros ini e fim para apontar a fila em sua nova
configuração
ini = novo;
fim=novo;
13
Exemplo de Inserção na Fila Encadeada
Supondo que v1 seja o primeiro valor quer foi inserido na fila e Inserindo mais um
elemento com valor v2:
novo = ALOCA nó
novo.dado = v2
novo.prox = NULO
Verificando que a fila não está mais vazia, o novo passa a ser o sucessor do que era o
último da fila (fim.prox = novo) e também se torna o último da fila (fim =novo):
14
Implementação em JAVA: enqueue
public void enqueue (int elem) {
NO novo = new NO();
novo.dado = elem;
novo.prox = null;
if (isEmpty())
ini = novo;
else
fim.prox = novo;
fim = novo;
}
15
FIRST
16
dequeue
17
Operação dequeue
modulo dequeue()
{
valor = ini.dado
ini = ini.prox
se (ini = NULO)
fim= NULO
retorna (valor)
}
18
Exercícios
19
Exercícios
20
Exercícios
21
Referências Bibliográficas
22
Copyright © 2024
Profa: Patrícia Magna
23