Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouDaniel Pacifico Alterado mais de 9 anos atrás
1
Filas São utilizadas em aplicações onde são impostos critérios para a inserção e retirada de elementos cuja ordem não depende da ordem natural dos valores dos dados. FIFO “first in first out”: o primeiro elemento a ser retirado é o primeiro que tiver sido inserido, ex.: fila de banco.
2
Filas As filas exigem acesso às duas extremidades do vetor: a) começo - onde é feita a retirada; e b) fim - onde é feita a inserção. Definição de filas - forma geral: tipo fila_vet :: reg (comeco:int; termino:int; elementos: vet [1..10] de dado); var f: fila_vet; i,j: dado;
3
Operações básicas Inicialização f.comeco <- 1; f.termino <- 0; Inserção Se f.termino =10 entao erro {excesso de elementos} Senao inicio f.termino <- f.termino + 1; f.elementos[f.termino] <- i; fim;
4
Definindo e inicializando filas
5
Operações básicas Retirada: Se f.termino < f.comeco entao nada { fila vazia } Senao f.comeco <- f.comeco + 1; Consulta ao elemento no começo da fila Se f.termino < f.comeco entao erro {fila vazia} Senao j <- f.elementos[f.comeco];
6
Operações básicas Fila Simples Tipo fila_vet :: reg (comeco:int; termino:int; elementos: vet [1..10] de dado); var f: fila_vet; i,j: dado; //Inicialização f.comeco <- 1; f.termino <- 0; //Inserção Se f.termino =10 entao erro {excesso de elementos} Senao inicio f.termino <- f.termino + 1; f.elementos[f.termino] <- i; fim; //Retirada: Se f.termino < f.comeco entao nada { fila vazia } Senao f.comeco <- f.comeco + 1; //Consulta ao elemento no começo da fila Se f.termino < f.comeco entao erro {fila vazia} Senao j <- f.elementos[f.comeco];
7
Representação na memória Após a inicialização, a fila vazia tem o seguinte aspecto: A atribuição do valor 1 inicial a f.comeco é para garantir que f.termino < f.comeco notando que se f.comeco = f.termino não indica fila vazia e sim uma fila com somente um elemento. A inserção dos elementos: 26,18,12,9,3,11,4,2,13 faz:
8
Representando na memória Havendo 4 retiradas da fila temos: Como a retirada envolve o incremento de f.comeco nota-se que a fila vai se deslocando da esquerda para a direita do vetor. Para inserir mais um elemento (17, por exemplo) soma-se 1 a f.termino, o qual passa a conter o índice 10, posição em que colocamos o valor 17. Se agora quisermos inserir mais um valor, isso não será possível (f.termino = 10 indica erro se for tentada uma inserção) o que de certo modo é absurdo, já que as posições 1 a 4 estão livres
9
Resolvendo inconsistências Para permitir a reutilização de posições já ocupadas, inserimos mais um componente “f.tamanho” que indica quantos elementos existem na fila no momento. Portanto as operações serão executadas conforme os algoritmos: Inicialização: f.comeco <- 1; f.termino <- 0; f.tamanho <- 0;
10
Resolvendo inconsistências Inserção: Se f.tamanho = 10 entao erro {excesso de elementos} Senao inicio f.tamanho <- f.tamanho + 1; f.termino <- (f.termino mod 10) + 1; f.elementos[f.termino] <- i; fim; Antes de incrementar f.termino tomamos o resto de sua divisão pelo n° de elementos do vetor, ex.: para inserir mais um elemento, f.termino será calculado por 10 mod 10 + 1 e o novo elemento será inserido na primeira posição do vetor.
11
Resolvendo inconsistências Retirada: Se f.tamanho = 0 entao nada {fila vazia} Senão inicio f.tamanho <- f.tamanho - 1; f.comeco <- (f.comeco mod 10) + 1; fim; Consulta: Se f.tamanho = 0 entao erro {fila vazia} Senao j <- f.elementos[f.comeco];
12
Operações básicas Fila Circular Tipo fila_vet :: reg (comeco:int; termino:int; elementos: vet [1..10] de dado); var f: fila_vet; i,j: dado; /* Inicialização: */ f.comeco <- 1; f.termino <- 0; /* Inserção: */ Se f.tamanho = 10 entao erro {excesso de elementos} Senao inicio f.tamanho <- f.tamanho + 1; f.termino <- (f.termino mod 10) + 1; f.elementos[f.termino] <- i; fim; /* Retirada: */ Se f.tamanho = 0 entao nada {fila vazia} Senão inicio f.tamanho <- f.tamanho - 1; f.comeco <- (f.comeco mod 10) + 1; fim; /* Consulta: */ Se f.tamanho = 0 entao erro {fila vazia} Senão j <- f.elementos[f.comeco];
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.