Você está na página 1de 29
(05/05/2022 21:54 Unidade 3 Estutura de dados com orientagéo a objetos ESTRUTURA DE DADOS COM ORIENTACAO A OBJETOS UNIDADE 3 - ESTRUTURAS DE DADOS (FILAS, PILHASE RECURSIVIDADE) Autora: Ana Lucia Pageiti Revisor: Warcos Paulo Lobo De Candia INICIAR Introdugao Caro(a) estudante, Nesta unidade, daremos continuidade ao estudo das estruturas de dados com a linguagem Java, trabalhando com as filas e as pilhas nos seus aspectos estaticos e dinamicos, que tém caracteristicas semelhantes de estruturas ja estudadas na Unidade 2, como os arrays e as listas. A recursividade também sera estudada como um importante mecanismo de programacao e que também resolve varios problemas classicos de programagao. Veremos as varias aplicagdes computacionais e reais destas estruturas, como o atendimento a solicitag6es em um Unico recurso compartilhado, em uma impressora, por exemplo, ou o agendamento de tarefas da CPU, promovidos pelas filas; e os recursos de fazer e desfazer encontrados em varios programas editores como hitps:fstudent.ulfe.com.briContentPlayer/index?lc=Y}F9ZyalvUS 1NnHHXn33Q%34%348 4Ffvxfq0s0F 1ZIDNEKEJgwik3d%3dBcd=rSuNL9qs... 1/29 osinsr2022 21:84 Unidade 3 -Estulura de dadon com oenagéo a objets © MS Word ou Photoshop e 0 recurso de avango e retrocesso em navegadores da web, promovido pelas pilhas. Bons estudos! 3.1 Fila em estrutura estatica e dinamica Como foi visto anteriormente, estruturas de dados dindmicas sao projetadas para facilitar a mudanga de estruturas de dados em tempo de execugdo e estruturas de dados estaticas tém tamanho de meméria fix, Nas estruturas de dados estaticas, a memoria alocada tem tamanho predefinido. Mesmo que nada seja armazenado, o espaco reservado nao poderd ser utilizado para armazenar outras informagées. Caso seja necesséria alocacdo de mais espaco, isso ndo sera possivel, de forma que somente reprogramar ou recompilar o programa viabilizaria esse processo (BIANCHI et al, 2014), Ja nas estruturas de dados dindmicas, a meméria é alocada conforme vai sendo necesséria para armazenar os dados, ou seja, é alocada em tempo de execugao. Neste contexto, uma fila é uma estrutura linear que segue uma ordem particular na qual as operagées sao realizadas, podendo ser implementada com auxilio de estruturas de dados estaticas ou dinamicas. Neste tépico, abordaremos os principais tipos de filas, suas caracteristicas, operagdes e formas de implementagdo. iso geral das filas » Clique nas setas ou arraste para visualizar 0 contetido parte superior. Uma fila 6 semelhante a uma fila de caixa em um supermercado: a primeira pessoa 6 atendida primeiro e os outros clientes entram apenas no final e esperam ser atendidos. NOS DAS FILAS S6 sdo removidos a partir da cabega da fila e sé sao inseridos na cauda. Por essa razdo, uma fila é referida como uma estrutura de dados primeiro a entrar, primeiro a sair (first-in, first-out — FIFO). INSERGAO E REMOGAO hitps:fstudent.ulfe.com.briContentPlayer/index?le=Y}nF&ZyalvUS 1NnHHXn33Q%34%348 4Ffvxfq0s0F 1ZIDNEKEJgwik3d%3d8cd=rSuNL9qs.... 2/29 osi0si2022 21:54 Unidade 2 - Estutura de dados com orientagao a objetos As operagées de insergdo e remogdo para uma fila séo conhecidas “USO Elf SISTEMAS DE COMPUTADOR A maioria dos computadores tem apenas um processador, entao somente um usuario por vez pode ser servido. As entradas para os outros aplicativos so colocadas em uma fila. A entrada na frente da fila 6 a préxima a receber o servigo. Fonte: DEITEL, H. M.; DEITEL, P. J., 2017. Puga e Rissetti (2004), sobre filas na area de programacao, afirmam que estas tém o mesmo conceito que no mundo real. Quando se entra na fila de um supermercado para pagar pelos produtos, o primeiro elemento a entrar na fila sera 0 primeiro elemento a sair. Aesse conceito, da-se o nome de “ First In, First Out” ou FIFO, expressao conhecida em portugués como PEPS ou “Primeiro Que Entra, Primeiro Que Sai”. Entao, no conceito de fila, os elementos sdo atendidos, ou utilizados, sequencialmente na ordem em que sao armazenados. Na fila, a inser¢ao é feita de uma extremidade conhecida como extremidade traseira ou cauda da fila, enquanto a exclusdo é feita da outra extremidade conhecida como extremidade dianteira ou cabega da fila. Em outras palavras, a fila é uma lista ou colegao em cuja insergao sé pode ser realizada em uma extremidade chamada extremidade traseira ou final da fila e a exclusdo em outra extremidade chamada de extremidade dianteira ou chefe da fila. Veja a representagdo de uma fila na Figura 1 abaixo: Figura 1— Representagao de uma fila Fonte: Elaborada pela autora, 2020. Existem varias utilizagdes de filas em sistemas de computador, como o atendimento da CPU as chamadas dos aplicativos ou para dar suporte a spooling de impress4o (DEITEL, hitps:tfstudent.ulfe.com.briContentPlayer/index?lc=Y}aF&ZyalvUS 1NnHHXn33Q%34%348 4Ffvxfq0s0F 1ZIDNEKEJgwik3d%3d8cd=rSuNL9qs... 3/29 osi0si2022 21:54 Unidade 2 - Estutura de dados com orientagao a objetos H. M.; DEITEL, P. J., 2017). 3.1.1 Operagées na fila De forma geral, pode-se fazer as seguintes operagdes em uma fila: + criar a fila, ou seja, informar a capacidade no caso de implementagao sequencial (vetor); + enfileirar (enqueue), sendo o elemento um parametro nesta operagdo; + desenfileirar (dequeue) * mostrar a fila (todos os elementos); + verificar se a fila esta vazia (isEmpty); * verificar se a fila esta cheia (isFull — implementagao sequencial — vetor). + obter o elemento na frente da fila sem remové-lo (peek); e, + contar os nés para saber 0 tamanho da fila (size). A partir das operagées realizadas, toda informagao que chega 4 fila é adicionada ao seu fim e toda informagao a ser consumida pelo recurso é retirada do inicio da fila. 3.1.2 Implementagao de fila Existem duas maneiras de implementar a fila: com alocagao sequencial e com alocagao. de lista encadeada. Na alocagdo sequencial, a fila pode ser implementada usando um vetor. Neste caso, é necessério construir um registro que contenha as informagées da fila, e cada um dos elementos da fila sera representado por uma posi¢do no vetor. Nessa implementagdo, segundo Bianchi (2014) deve-se ter atengdo para: + estipular um tamanho para o vetor (quantidade maxima de informagoes guardadas nele); + verificar se nado chegou ao final do vetor, ou seja, se nao o estourou; + ter duas varidveis inicio e fim para controlar as posigées do vetor onde estdo essas posigées; hitps:student.ulfe.com.briContentPlayer/index?le=Y}aF&ZyalvUS 1NnHHXn33Q%34%348 4FfvxfqOs0F 1ZIDNEKEJgwik3d%3d8cd=rSuNL3qs.... 4/29 osinsr2022 21:84 Unidade 3 -Estulura de dadon com oenagéo a objets + a posigao para a qual a varidvel inicio aponta tem a informago para ser consumida, assim como a varidvel fim aponta para a Ultima posicao que tenha informagao armazenada. Uma fila estatica é definida antecipadamente e a definigdo da fila persiste no ambiente. E implementada com um array para que todas as operagées da fila sejam baseadas em indice, o que torna mais rapidas todas as operagées, exceto a exclusao, pois requer 0 deslocamento de todos os elementos restantes para a frente em uma posi¢ao. Observe 0 exemplo de aplicagao de fila estatica import java.util.*; i classe para criagao da fila class Fila { private int arr; // array para armazenar os elementos da fila private int inicio; // ponteiros de inicio para o inicio da fila private int fim; // ponteiro finail que indica o Ultimo elemento da fila private int capacidade; // capacidade maxima da fila private int contar; // tamanho atual da fila / construtor para inicializar a fila Fila (int tamanho) { arr = new int[tamanho]; capacidade = tamanho; inicio = 0; fim = contador = 0; } / fungao para excluir elemento da fila public void dequeue () { /I verifica se a fila esta vazia if (isEmpty()) { hitps:student.ulife.com br/ContentPlayerlindex?lc=YjnF8ZyalvUS 1NoHHXn330%34"348 IF xfq0s0F 12IDNEKE Jowik34%348ed=rSuNL3qs 5106/2022 21:54 Unidad 3 - Esrutura de dados com orentagSo a abjelos System.out.printin("Fila vazia\nPrograma finalizado"); System.exit(1); } System.out.printin("Removendo " + arr[inicio]); inicio inicio + 1) % capacidade; // operagao matematica para garantir que o indice / | fique dentro do range permitido, simulando uma /Ilista circular para nao ter que mexer na posi¢ao /ide todos os outros elementos; é uma otimizagao contador-~; } // fungao para incluir elemento na lista public void enqueue (int item) { /I verifica se a fila esta cheia if (isFull()) { System.out.printin("Fila cheia\nPrograma finalizado"); System.exit(1); } System.out.printin("Incluindo " + item); fim = (fim + 1) % capacidade; // operagdo matematica para garantir que o indice II fica dentro do range permitido, simulando uma /Ilista circular para nao ter que mexer na posic¢ao /Ide todos os outros elementos; 6 uma otimizagao arr[fim] = item; contador++; } // fungao para retornar o elemento do inicio da fila public int peek() { if (isEmpty()) { System. out printin("Vazia\nPrograma Finalizado” System.exit(1); } hitps:student.ulf.com br/ContentPlayerlindex?lc=YjnF&ZyalvUS 1NnHHXn330%34"4348 IF vxfq0s0F 12IDNEKEJowik30%348ed=rSuNL3qs... 6129

Você também pode gostar