Material didático para conceituar e implementar filas usando alocação estática sequencial

MarceloDuduchi 2 views 28 slides Sep 15, 2025
Slide 1
Slide 1 of 28
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28

About This Presentation

Material didático usado para ensinar o conceito de filas como listas restritas e apresentar possível implementação de filas circulares usando memória estática sequencial em Linguagem Pascal. O material começa conceituando listas lineares, apresenta o modelo conceitual de filas e uma represent...


Slide Content

Estruturas de Dados ► Filas (Linguagem Pascal) Prof. Dr. Marcelo Duduchi Aux. Docente Lucio Nunes

Listas Lineares 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 que sai; Conheceremos agora as filas. 2

Filas 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 : insere um item no final da fila; RETRIEVE : remove um item do início da fila. 3

Filas (modelo conceitual) 4 s tore A Novos elementos são armazenados no final da fila

B Filas (modelo conceitual) 5 store A Novos elementos são armazenados no final da fila

C Filas (modelo conceitual) 6 s tore A B Novos elementos são armazenados no final da fila

D Filas (modelo conceitual) 7 store A B C Novos elementos são armazenados no final da fila

Filas (modelo conceitual) 8 Sequência armazenada em fila. A B C D Note que em nosso exemplo o começo foi definido na ponta esquerda

Filas (modelo conceitual) retrieve Os elementos sairão na ordem em que entraram 9 B C D A

Filas (modelo conceitual) r etrieve Os elementos sairão na ordem em que entraram 10 C D B

Filas (modelo conceitual) r etrieve Os elementos sairão na ordem em que entraram 11 D C

Filas (modelo conceitual) r etrieve Os elementos sairão na ordem em que entraram 12 D

─ A ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ D ─ ─ ─ ─ ─ ─ Filas (representação gráfica) 13 s tore (fila, 'D ' ); Rear Front r etrieve (fila); Rear Front s tore (fila, ' A ' ); Rear Front

─ A B ─ ─ ─ ─ ─ A B C ─ ─ ─ ─ ─ B C ─ ─ ─ Filas (representação gráfica) 14 s tore (fila, ' B ' ); Rear Front s tore (fila, ' C ' ); Rear Front r etrieve (fila); Rear Front

─ ─ B C D ─ ─ ─ ─ B C D E ─ ─ ─ ─ C D E ─ Filas (representação gráfica) 15 s tore (fila, ' D ' ); Rear Front store (fila, ' E ' ); Rear Front r etrieve (fila); Rear Front

─ ─ ─ ─ D E ─ ─ ─ ─ ─ ─ E ─ ─ ─ ─ ─ ─ ─ ─ Filas (representação gráfica) 16 r etrieve (fila); Rear Front r etrieve (fila); Rear Front r etrieve (fila); Rear Front

Filas (implementação) Implementaremos uma fila circular, pois é mais eficiente do que a quela onde “empurramos” os elementos para as posições iniciais do vetor; Na fila circular tanto o front quanto o rear caminham em direção ao final do vetor, porém, no término do vetor, voltam ao seu início, trabalhando de forma circular . 17

Filas (implementação) Na inclusão colocamos o elemento na posição do rear que, na sequência, irá para a próxima posição. 18 store (fila, 'B');

Filas (implementação) Na retirada retornamos o elemento que está no front que, na sequência, irá para a próxima posição. 19 retrieve (fila);

Filas (implementação) A condição de fila cheia acontece quando o “próximo de rear ” for igual ao front ; A condição de fila vazia acontece quando front é igual ao rear ; Essa é uma possível saída para fila cheia e vazia serem diferentes. Por conta dessa abordagem uma posição do vetor é “sacrificada”. 20

Filas (implementação) Consideremos para a nossa implementação um grupo de operações: c reate → inicializa a fila d estroy → esvazia a fila is f ull → verifica se está cheia isempty → verifica se está vazia s tore → insere um elemento r etrieve → retira um elemento n ext → indica a próxima posição 21

Filas (definição da estrutura) 22 type TFila = record vet : array [ 1 .. 7 ] of char ; front , rear : integer ; end ; TFila vet front rear 1 2 3 4 5 6 7

Filas ( n ext ) 23 function next ( n : integer ): integer ; begin next := ( n mod 7 ) + 1 ; end ; function next ( n : integer ): integer ; begin if n < 7 then next := n + 1 else next := 1 ; end ; A função next será responsável por informar a próxima posição, tanto para rear quanto para front . PRIMEIRA VERSÃO SEGUNDA VERSÃO

Filas ( c reate , d estroy , isfull e isempty ) 24 function isfull ( var f : TFila ): boolean ; begin if next ( f . rear ) = f . front then isfull := true else isfull := false ; end ; procedure c reate ( var f : TFila ); begin f . front := 1 ; f . rear := 1 ; end ; procedure d estroy ( var f : TFila ); begin f . front := f . rear ; end ; function isempty ( var f : TFila ): boolean ; begin if f . rear = f . front then isempty := true else isempty := false ; end ;

Filas ( isfull e isempty ) 25 function isfull ( var f : TFila ): boolean ; begin isfull := next ( f . rear ) = f . front ; end ; function isempty ( var f : TFila ): boolean ; begin isempty := f . rear = f . front ; end ; SEGUNDA VERSÃO

function retrieve ( var f : TFila ): char ; var aux : char ; begin if isempty ( f ) then begin writeln ( ' underflow ' ); halt ; end ; aux := f . vet [ f . front ]; f . front := next ( f . front ); retrieve := aux ; end ; Filas ( s tore e r etrieve ) 26 procedure store ( var f : TFila ; x : char ); begin if isfull ( f ) then begin writeln ( 'overflow' ); halt ; end ; f . vet [ f . rear ] := x ; f . rear := next ( f . rear ); end ;

Filas (exemplo de utilização) 27 procedure isolaletra ( var s : string ); var f : TFila ; i , tam : integer ; begin create ( f ); i := 1 ; tam := length ( s ); while not isfull ( f ) and i <= tam do begin store ( f , s [ i ]); i := i + 1 ; end ; s := '' ; while not isempty ( f ) do s := s + '[' + retrieve ( f ) + ']' ; end ; [A][B][ C ][ D ][ E ][F] ABCDEF

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; Também são bastante utilizadas para a simulação de filas de espera do mundo real, como as de atendimento em bancos; Uma aplicação interessante de filas é a coloração de regiões (pesquise !). 28