0% acharam este documento útil (0 voto)
33 visualizações25 páginas

Estrutura de Dados

O documento aborda a estrutura de dados, focando em listas, filas e pilhas, e suas implementações em programação, especialmente em Java. Ele discute conceitos como listas encadeadas e duplamente encadeadas, além de operações básicas como inserção, remoção e leitura de elementos. A autora também menciona a importância de entender essas estruturas para aplicar a solução correta em diferentes situações de programação.

Enviado por

Lucas Otrop
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
33 visualizações25 páginas

Estrutura de Dados

O documento aborda a estrutura de dados, focando em listas, filas e pilhas, e suas implementações em programação, especialmente em Java. Ele discute conceitos como listas encadeadas e duplamente encadeadas, além de operações básicas como inserção, remoção e leitura de elementos. A autora também menciona a importância de entender essas estruturas para aplicar a solução correta em diferentes situações de programação.

Enviado por

Lucas Otrop
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF ou leia on-line no Scribd
sornarz0z4, 17:52 Estrutura de Dados ESTRUTURA DE DADOS UNIDADE 3 - LISTA, FILA E PILHA Katia Cristina Lage dos Santos sornarz0z4, 17:52 Estrtura de Dados hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 2105 sornare0z4, 17:52 Estrtura de Dados Introducgao Um tipo abstrato de dados é formado por um mecanismo de armazenamento e um conjunto de operacdes quanto a esses dados. Uma analogia interessante é uma sala de aula, em que os elementos que a formam sio as mesas e as cadeiras, dispostas sequencialmente, Algumas operacées que podem ser aplicadas sobre esses dados seriam mover a cadeira, escrever sobre a mesa, entre outras. No entanto, e se qui mecanismo mais elaborado para definir a incluso ou remogo de novas mesas e cadeiras na sala? Os aspectos relacionados & insergio e retirada de elementos em uma estrutura de dados so operarées muito recorrentes. De acordo com a ordem em que esses elementos sdo inseridos ou removidos, temos trés importantes estruturas de dados. Ser, contudo, que essas estruturas podem ser implementadas de forma diferente no paradigma estruturado e no paradigma orientado a objetos? Qual 6 a complexidade disso para entendermos as estruturas? Nesta unidade, veremos os conceitos de fila pilha e lista, que, assim como diversos outros na area de Ciéncia da Computagdo, visam imitar os conceitos do mundo real. Essa abstragdo seri importante para compreendermos a definigao e, com a pritica, aplicarmos a estrutura correta para cada situacio. Além disso, aprenderemos que, independentemente do paradigma de programago adotado, o conceito das estruturas de dados seré.o mesmo, Projetos de expresso nacional, como o Sistema Pablico de Escrituragio Digital, é um exemplo, pois utilizam o conceito de filas para realizar 0 processamento das notas fiscais. ‘Vamos, entio, iniciar nossos estudos. Acompanhe! 3.1 Lista © termo “lista’ & comumente empregado no dia a dia. Temos listas de tarefas, de supermercadas ou até de presentes de casamento. Contudo, do que, de fato, trata-se uma lista? De forma geral, uma lista se refere a um conjunto de elementos dispostos de forma sequencial, podendo ow do ter repeticdo do mesmo item. De maneira mais simples, poderfamos representar uma lista como uma sequencia de itens: + Arroz + Feijéo + Sabaoem pd + Detergente + Leite + Café 6 que as listas também podem ser mais elaboradas. Se, por exemplo, pensarmos em agrupar os itens anteriores em categorias, poderiamos ter uma representaro um pouco diferente, como: 1. Alimentos = feijio; = leite; ~ café 2. Limpeza: = sabiio em po; - detergente, Nas duas representagées de listas, é possivel perceber que, quando vamos fazer a leitura, inserir ou retirar um elemento, podemos realizar a ag3o de forma arbitriria, Por exemplo, imagine a situago de ter uma dessas listas para fazer compras no supermercado: poderiamos ler item a item, na ordem, e ir marcando aqueles que hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 3125 sornarz0z4, 17:52 Estrtura de Dados ji esto no carrinho de compras. Assim, essas caracteristicas siio mimetizadas na estrutura de dados de Na linguagem Java, a forma mals simples para armazenar os elementos de uma lista 6 com 0 uso de vetores (arrays), também conhecidas como listas implementadas com arrays (PUGA; RISSETTI, 2010). Entretanto, como a insergo ou retirada de diferentes de implementar essa estrutura de dados. ementos pode ocorrer em qualquer posigio do veto, existem maneiras VOCE QUER LER? Podemos conseguir diversos materiais adicionais para 0 estudo e entendimento das estruturas de dados na internet, Se aprofundar a respelto do assunto € bastante sturas em diferentes interessante, pols € possivel ter acesso a implementago das e lnguagens e com abordagens dstints. Nesse sentide, uma reerncia para leura &a apostilaelaborada pelo professor Ivan Rearte, da Unicamp, inttulada “Estrutura de Dade’ digpontel ne tink hitp:feaaudea fee unicamp br /wiki/Images/0/01/EstrturasDados pdt (hp://etnaudeaSeeamnicamp b/wik/images/0/01 EstruturasDadospat) No item a seguir, veremos os tipos de listas e como a implementagio delas pode ser feita com o uso de classes. 3.1.1 Tipos de listas Pela caracteristica estitica dos vetores, adicionar um elemento na primeira posigo, por exemplo, consome muito tempo, pois precisamos deslocar todos os outros elementos uma posigio para frente, A performance dessa operasio degrada conforme a quantidade de elementos do nosso vetor cresce, ou seja, ela consome tempo linear em relacio ao nimero de elementos. Analogamente, remover um elemento da primeira posi¢io implica em deslocar todos os outros elementos que esto na frente para tris. Nessas situagdes, devemos fazer uso das classes ¢ dos objetos para conseguirmos adicionar ou remover um elemento de alguma posi¢io da lista, com um custo computacional menor que a manipulaco de vetores, Nesse sentido, surge o conceito das listas encadeadas. A figura a seguir representa este modelo. hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 425 sornarz0z4, 17:52 Estrutura de Dados Primeiro Informacéo Préximo Informagio Préximo Informagio Préximo Informado Préximo Figura 1 - Representasio de uma lista encadeada com quatro elementos Fonte: Elaborada pela autora, 2019 NULL. ‘WPraCegoVer: A imagem mostra uma representacio de uma lista encadeada. A representagio é fetta utilizando 4 rotingulos, um ao lado do outro, em que cada cada retangulo esta conectado com o retangulo da frente. O primeiro retangulo possui uma indicagéo dizendo "Primeiro’e o iiltimo retngulo possui uma indicagao dizendo "NULL". Uma lista encadeada, entio, corresponde a uma estrutura iniciada pela defini¢ao de um elemento que “aponta’ para o inicio da lista. Na figura anterior, o elemento "primeiro” esté indicando qual é 0 primeiro item da lista. Cada elemento ¢ formado por duas partes: uma informacéo e uma referéncla (préximo) para 0 préximo elemento da lista, Isto ocorre para todos os elementos, até que seja alcangado o ultimo, Este, de forma diferenciada, tem um marcador para indicar o fim da lista, Geralmente, o marcador utilizado para o fim da lista 60 valor null ntips:lcodely-Imu-contents3.amazonaws convMoodle/EAD/Conteuds/CTI_ESTDAD_19lunidade_s/ebooklindex. him! 525 sornarz0z4, 17:52 Estrutura de Dados VOCE O CONHECE? Donald Ervin Knuth & um cientista da computagio de renome e professor emérito da Universidade de Stanford, Ele 6 comumente referenciado pelas anilises cuidadasas de algoritmos clissicas da Ciéncla da Computagio, Autor do livro "A arte da Ciéncia da Computagic’, uma das principals referéneias da area, Knuth também é o criador do sistema tipogréfico TEX, bastante utlizado para a construgio de artigos cientificos (ROBERTS, 2018). Vale conhecermos mais sobre ele! ara a representago em Java da estrutura de dados, faremos o uso de classes. Na figura a seguir, édeclarada a classe “lista’, que contém uma referéncia para o primeiro Item. Cada um dos elementos ¢ apresentado pela classe “ItemLista’, que contém um atributo do tipo string, representando a informagao e uma referéncia (prox) para o préximo item da lista class Lista{ private ItemLista primeiroItem; } class ItemLista{ private String info; private ItemLista prox; ONAOAWNEH Figura 2 - Implementagio da lista simplesmente encacleada em Java Fonte: Elaborada pela autora, 2019, ntips:lcodely-Imu-contents3.amazonaws convMoodle/EAD/Conteuds/CTI_ESTDAD_19lunidade_s/ebooklindex. him! 625 sornarz0z4, 17:52 Estrutura de Dados ‘#PraCegoVer: A imagem mostra um trecho de cédigo de 8 linhas de programa, Enumerando cada linha temos: Linha 1: class Lista{ Linha 2: private ItemLista primeiroltem; Linha3:} Linha 4: Linha 5: class ItemLista{ Linha 6: private String info; Linha 7: private ItemLista prox; Linha 8:) A lista apresentada é chamada de “simplesmente encadeada’, pois, para cada célula ou item, hd a indicag3o apenas do préximo elemento da lista. No entanto, existe outro tipo de lista em que ha, também, um indicador para o elemento anterior, Como hé uma indicagao dupla, alista é chamada de “duplamente encadeada’, Veja a figura a seguir que retrata 0 conceito. lista primeiro altimo anterior anterior la proximo préximo lala Figura 3 - Representaco de uma lista duplamente encadeada Fonte: Elaborada pela autora, 2019, #PraCegoVer: A imagem mostra uma representacdo visual de uma lista duplamente encadeada Nesta representagao temos varios retangulos em que cada retangulo possul uma conexo do lado direito ¢ uma conexio do lado esquerdo, Estas conexdes simbolizam referéncias para outros retangulos. Para a representago em Java da lista duplamente encadeada, iremos acrescentar uma referéncia para o ultimo item, na classe “lista’, assim como também seri adicionado um atributo do tipo “ItemLista’ na classe de mesmo nome, representando a informacio e uma referéncia (ant) para o elemento anterior do item, Observe a figura a seguir, ntips:lcodely-Imu-contents3.amazonaws convMoodle/EAD/Conteuds/CTI_ESTDAD_19lunidade_s/ebooklindex. him! 725 sornarz0z4, 17:52 Estrutura de Dados 1¥ class Lista{ 2 private ItemLista primeiroItem; 3 private ItemLista ultimoItem; es S 6¥ class ItemListaf{ iG private String info; 8 private ItemLista prox; o private ItemLista ant; 10 }| Figura 4 Implementagao da lista duplamente encadeada em Java Fonte: Elaborada pela autora, 2019, #PraCegoVer: A imagem mostra um trecho de cédigo de 10 linhas de programa, Enumerando cada linha temos: Linha 1: class Lista Linha 2: private ItemLista primeiroltem; Linha 3: private temLista ultimoltem; Linha 4:} Linha 5: Linha 6: class ItemLista{ Linha 7: private String info; Linha 8: private ItemLista prox; Linha 9: private ItemLista ant; Linha 10:) Agora que jé vimos @ conceito de listas ¢ os principais tipos, vamos estudar sobre as principals operagies com essa estrutura de dados, 3.1.2 Operagées com listas ‘A definigdo das operagSes em uma estrutura de dados sempre est atrelada ao tipo de dados armazenado, Assim, as principals operagdes de manipulagao de uma lista se referem a leitura, incluso e remogao de um item da lista, bem como 0 tamanho total de itens ¢ a verificagdo se todos os elementos necessérios esto presentes na lista ntips:lcodely-Imu-contents3.amazonaws convMoodle/EAD/Conteuds/CTI_ESTDAD_19lunidade_s/ebooklindex. him! 8125 sornarz0z4, 17:52 Estrutura de Dados ‘Ainelusio de um item pode ser implementada de formas diferentes, Pode-se optar por uma implementao fem que o item sempre é inserido no final da lista ou incluir um item na lista, informando a posigo em que se deseja inserir o elemento. Dessa forma, a definigao da classe “lista, teria os seguintes métodos: 1¥ class Listaf{ 2 private ItemLista primeiroItem; //métodos 4 public void adiciona(ItemLista novoItem){ } 5 public void adiciona(ItemLista novoltem, int posicao) { + 6 public void remove(ItemLista itemParaRetirar){ } 7 public void ler(int posicao){ } 8 public int tamanhoLista(){ } public boolean contem(ItemLista itemBuscado) { } ie jl Fignra 5 lmplementarao das operarSes em urna lista encadeada Font; Elaborada pla autora, 2019 ‘#PraCegoVer: A imagem mostra um trecho de cédigo de 10 linhas. Enumerando cada linha temos: Linha 1: class Lista Lina 2: private ItemLista primeiroltem; Lina 3: //métodos Linha 4: public void adiciona(ItemLista novoltem){ } Linha 5: public void adiciona(ItemLista novoltem, int posicao){ } Lina 6: public void remove(ItemLista itemParaRetirar){ } Linha 7: public void ler(int posicao){} Linha 8: public int tamanhoLista(){ } Linha 9: public boolean contem(ItemLista itemBuscado) { } Linha 10:} Independentemente de a lista ser simplesmente ou duplamente encadeada, as operagdes seriam as mesmas, pols a diferenga esté na Implementago das operagdes. No caso de acionar um elemento na lista, temos duas assinaturas possiveis: adicionar um elemento sempre no infcio ow no final da lista; adicionar um item em uma posigio especifica. A operardo de remogio, por sua ver, visitaria cada um dos elementos da lista até encontrar aquele correspondente ao item passado como parametro. tips:fcodely-ru-contents smazonaws comiMoodle/EADIConteudsiCTI_ESTDAD_19lunidade_slebooklindex. him! 9125 sornarz0z4, 17:52 Estrtura de Dados Vocé QUER VER? Assim como tentamos buscar abstrair os conceitos para entender e fixar as estruturas de dados, a Inteligéncia Artificial 6 uma area da Ciéncia da Computagio que busca Implementar uma série de algoritmas e tgenicas que imitam 0 raciocfnio légico adotado pelo ser humano, Esse fo tema do filme "Els" dirigido por Spike Jonze. Trata-se de ‘uma obra sobre um sistema operacional comprado por um homem solitério para Ihe fazer companhia, Como o sistema é implementado de forma a sempre agradar 0 usuario com suas respostas, o homem acaba desenvolvendo uma relago amoresa com o sistema operacional No exemplo do “ItemLista’, o critétio de comparagao poderia ser o mesmo valor do atributo info, Ao ler um elemento da lista, deve ser passada a posi¢do que ele ocupa, Observe que tal comportamento é 0 mesmo implementado quando acessamos um item em um vetor (array). 0 método que retorna o tamanho da lista é ‘muito interessante, podendo ser utilizado tanto nos algoritmos de busca quanto nos algoritmos de ordenagio: devemos visitar todos os itens da lista até encontrar o final da estrutura, hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 10125 sornarz0z4, 17:52 Estrtura de Dados VAMOS PRATICAR? Crie duas classes Java denominadas “ItemLista” e “Lista’. Copie os apresentados nas Figuras 2 e Se adicione um construtor na elasse “Lis inicialize o atributo prox com o valor null Implemente os métodos para adi remover um item da lista, Lembre-se de que, para adicionar um elemen precisa criar um objeto do tipo "ItemLista”e, depois, fazer com o que atrib do elemento anterior aponte para o novo “Itemlista’ criada, Para reme item da lista, vocé tem que selecionar o elemento prox do elemento an inicé-1o com 0 valor do elemento apontado pelo atributo prox do eleme esté sendo removido, Por fim, © método retorna um valor verdadeiro (true) ou falso (false), dependendo se 0 elemento passado como parimetro foi encontrado na lista. Novamente, no exemplo do "ItemLista’, o critério de comparacio poderia ser 0 mesmo valor do atributo info. 3.1.3 Aplicagées praticas das listas A aplicasao pritica de listas ¢ diversificada, pois est, geralmente, associada a um conjunto de elementos (ziviant, 2012) Para conhecer mais sobre o tema, clique nas setas. Pensando no contexto de um sistema empregado em uma instituigdo de ensino, em que precisamos de um software para gerenciar 0 corpo docente, as listas seriam utilizadas para representarem os alunos em uma classe. Ao elaborar as listas de presenca, os itens (alunos) so dispostos em ordem crescente do atributo de nome, Neste caso, é interessante observar como a estrutura de dados pode ser empregada pelos algoritmos de ordenacio. O algoritmo de ordenago pelo nome, no caso, seria implementado dentro da classe “lista hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 115 sornarz0z4, 17:52 Estrtura de Dados Outra aplicagio muito comum para as listas é na definicZo dos passos em um pracesso. Como vvimos nas operagées de um elemento do tipo “ItemLista’, ao adicionar um elemento, podemos optar pela sua insersao no final da lista ou em uma posigao especifica. A posigdo, nesse contexto, seria a ordem em que determinada tarefa deve ser realizada, sendo que a tarofa em si representa cada um dos itens da lista ‘Agora que jé conhecemos sobre as listas, vamos aprender outro conceito importante para nossa disciplina: a fila 3.2 Fila No dia a dia, estamos acostumados a vermos e enfrentarmos filas em diversos lugares: bancos, mercados, hospitals, cinemas, entre outros, Contudo, precisamos pensar que elas so essenciais, uma vez que determinam a ordem de atendimento das pessoas. Dessa forma, temos que os elementos de uma fila sio acessados de acordo com a posigo em que ocupam. A construs3o de uma fila parte do principio de que o primeiro a chegar é 0 primeira a ser atendido. Nas filas dos supermercados, por exemplo, as pessoas so atendidas conforme a ordem de chegada, nao 6? Quando primeiro da fila é chamado, a fila “anda’, ou seja, 0 segundo passa a ser o primeiro, o terceiro passa a ser 0 segundo, ¢ assim por diante, até chegarmos a iltima pessoa, Normalmente, para entrar em uma fila, uma pessoa deve se colocar na tiltima posigao, ou seja, no fim. Assim, quem chega primeiro tem prioridade, A figura a seguir representa uma fila. fim Inicio enfileira mp X, |X, X,|X,| X, —_eb desenfileira Figura 6- Representacao de uma fila Fonte: Elaborado pela autora, 2019, ‘#PraCegoVer: A imagem mostra uma representagdo de uma fila. No inicio da fila temos os dados, X1, X2, X3 e assim por diante até o fim da fila que tem o dado Xn, A imagam enfatiza que os dadas devem ser retirados do inicio da fila e devem ser enfileirados no inicio da fila Conforme podemos observar na figura anterior, a estrutura fila se assemelha muito com a estrutura lista, O grande detalhe esta nas operacdes de insergo (enfileirar) e remog3o de um item (desenfileirar), que devem ocorrer de acordo com a ordem indicada pelos nimeros 1, 2, 3 ... n. Dizemos, neste caso, que as filas tém operagées mais restritas que as listas. 3.2.1 Representasao e operasées das filas A forma mais simples de implementar uma fila 6 por meio da representagio de vetores (arrays) Diferentemente da lista, ndo hi a necessidade de se inserir um elemento em uma posi¢ao diferente do final da fila (ZIVIANI, 2012). Assim, devemos manter apenas a posi¢ao do préximo elemento da fila para inserir um hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 1205 sornarz0z4, 17:52 Ja para desenfileirar um elemento, acessamos sempre o primeiro elemento da fila, Em seguida, precisamos atualizar a fila, passando 0 segundo elemento para a primetra posigdo, o terceiro elemento para a segunda Estrutura de Dados posigao, e assim sucessivamente. Além do fato de sempre ter que atualizar os elementos em caso de retirada de um item da fila, essa cial definido para o vetor, Se for necessario inserir um elemento a mais que o tamanho inicialmente definido, torna-se necessério declarar um novo vetor com representagdo é limitada, também, pelo tamanho tamanho maior e copiar os valores jé inseridos. Pensando no exemplo de implementar uma fila de pessoas, podemos definir a fila, os itens da fila e as operagdes necessérias conforme o cédigo retratado na figura a seguir, 9 } class FilaPessoas{ private Pessoa primeiraDaFila; private Pessoal ultimaDaFila; //métodos public void enfileira(Pessoa novaPessoa){ } public void desenfileira(Pessoa umaPessoa){ } public void obtemPosicao(Pessoa umaPessoa){ } public boolean estaVazia(){ } 10 class Pessoa{ 3 i ‘#PraCegoVer: A imagem mostra um trecho de cédigo de 13 linhas. Enumerando cada linha temos: private String nome; private Pessoa prox; Figura 7 - Implementaco de uma fila de pessoas em Java Fonte: Flaborada pela autora, 2019. Linha 1: class FilaPessoas( Linha 2: private Pessoa primeiraDaFila; Linha 3 private Pessoal ltimaDaFila; Lina 4: //métodos Linha 5: public void enfileira(Pessoa novaPessoa) {) Linha 6: public void desenfileira(Pessoa umaPessoa){ } Lina 7: public vold obtemPosicao(Pessoa umaPessoa){ } Linha 8: public boolean estaVazia() {) Linha 9:) Linha 10: class Pessoa Linka 11: private String nome; Linha 12: private Pessoa prox; Linha 13:) tips:fcodely-ru-contents smazonaws comiMoodle/EADIConteudsiCTI_ESTDAD_19lunidade_slebooklindex. him! 13925 sornarz0z4, 17:52 Estrtura de Dados No cédigo, uma fila tem uma referéncia para o primeiro e para o iiltimo elemento, Isto é importante porque a operagio de enfileirar precisa da informagio de quem é 0 iiltimo item da fila; enquanto a operasio de desenfileirar necessita da referéncia para o primelro elemento. A aperagdo obtemPosicao retorna & posigao ‘ocupada pela pessoa passada como parametro, Por fim, a operacio estaVazia retorna verdadeiro (true) caso a fila esteja vazia, sendo que, do contrario, retorna falso (false). VAMOS PRATICAR? rie duas classes Java denominadas “Pessoa” e "FllaPessoa’. Copie 0 apresentado na Figura 7. A dasse "Pessoa" deve ter dois atributes do tip (nome e CPF) e um atributo do tipo “Pessoa” com 0 valor prox. Adici construtor na classe “FiaPessoas" que inicalize os atributos primeiral tultmoDaFila com o valor null, Este caso reflete a fila no inicio do expedi Instituigko em que fila de pessoas é formada, ou seja, a fila inidalme varia. Implemente, entio, os métodos para enfileirar e desenfileirar um fila, Lembre-se de que, para adicionar um elemento, vocé precisa criar un do tipo "Pessoa" e, depols, fazer com o que atvibuto prox do elemento aponte para o novo objeto do tipo “Pessoa” criado. Para desenfileirar, v que selecionar 0 elemento primeiraDaFila ¢ inicié-lo com o valor do © apontado pelo atributo prox do elemento que esta sendo desenfileirado, Na sequéncia, vamos conhecer algumas aplicagées praticas das filas. 3.2.2 Aplicagées praticas das filas As aplicagBes priticas de filas so iniimeras, Existem filas com tamanko fixo (estiticas) e filas com tamanho indeterminado (dinamicas), Além disso, temos um tipo especial de fila estatica denominada “circular dinamica’, comumente utilizada pelos sistemas operacionais. Elas so usadas pelos algoritmos da meméria principal do computador, a fim de realizarem o gerenciamento do que deve ou nio estar na meméria de acesso mais rpido e no relégio da maquina (DEVMEDIA, 2012). Como elas so circulares, o tamanho ¢ fixo e os elementos inseridos na fila sio alternados. Quando um elemento sai da fila, abre uma posi¢ao para a insergdo de um novo elemento. Clique nos itens e conhesa mais sobre o assunto, hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 1425 sornarz0z4, 17:52 Eetrtura de Dados Um exemplo muito comum de uso na drea de sistemas computacionais e web sao as filas de processos assincronos. Estas, geralmente, sao filas dindmicas, j4 que nao é possivel determinar o tamanho exato de processos que serao enfileirados. Um processo € chamado de assincrono quando nao ha uma resposta imediata ao ser realizada uma chamada de um servic¢o. E muito comum quando o processamento é complexo ou quando depende da consulta a outros sistemas, como o processo de compra de um item em uma loja virtual. Apés selecionarmos os itens de interesse e iniciarmos 0 processo de compra, o sistema precisa confirmar os dados de pagamento, verificar se o item est4 em estoque, separar o item para envio, enviar e, por fim, acompanhar a entrega do item até o destinatério. Por serem varias etapas que nao sao finalizadas de imediato, 0 uso de filas auxilia o procedimento. Outro exemplo comum de fila dindamica é quando vamos abrir um processo em um érgio publico para tratar de alguma questo burocratica, como a emissao de uma certidao negativa de débitos ou 0 pedido de reavaliac&o de impostos cobrados. Por ser um processo que demanda o acesso a base de dados, andlise caso a caso e, talvez, o acesso a outros sistemas; geralmente, abrimos o hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 18125 tovran02s 1782 Esta de Dados processo e recebemos um identificador para consulta posterior. VOCE SABIA? ‘A Java Message Service, especiticacdo JSR-914, tem como objetivo 0 processo de woca de mensagens entre sistemas, Bl define dols padrées para o armazenamento de mensagens: queue (fila) e topic (t6pico). A troca de ‘mensagens pode ser usada em projetos de integrarZo entre aplicagdes, sistemas de sineronizagdo de banco de dados ou para um sistema de chat (DEVMEDIA, 2012). Apesar de termos APIs e frameworks que j4 implementam grande parte das operagées de filas, ¢ importante entender o funcionamento para que as falhas eventuais que vierem a acontecer sejam identificadas com maior rapidez e acurécia, Outro conceito essencial para nossos estudos ¢ 0 de pilha, Vamos conhecer sobre ele e entender suas aplicagdes no t6pico a seguir: Acompanhe! 3.3 Pilha 0 conceito de pilha esta igualmente relacionado ao termo utilizado em nosso dia a dia, Assim, temos a pilha de livros, a pilha de pratos, apilha de processos, entre tantas outras. Outro cendrio comum para o uso do conceito é em uma falbrica de produsdo ou montagem de produtos. Determinado produto é composto por intimeras pegas (p1, p2, ... pn), Sendo que seu processo de montagem & automético (executado por uma méquina) e exige que as pesas sejam colocadas em ordem especifica {primeiro a pi, depois a p2, depois a p3, e assim por diante). As peras, entio, sao empilhadas na ordem adequada e a maquina de montagem vai retirando peca por peca do topo da pilha para montar 0 produto final. A figura a seguir representa uma pill. hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 16125 sornarz0z4, 17:52 Estrtura de Dados empilha desempilha + tT top0 Fundo Figura 6 - Representago de uma pilha Fonte: Blaborada pela autora, 2019, ‘#PraCegoVer: A imagem mostra uma representacio visual de uma pilha, A imagem enfatiza que os dados sio empilhados no topo da pilha e so desempilhados do topo da pilha. Conforme pode ser identificado na figura anterior a pilha tem uma definig#o muito similar ao de uma fila, com a diferenga de que a insergio e a remogiio de elementos ocorrem a partir de um mesmo ponto: 0 topo da pilha, No item a seguir, veremos a representacao e as principais operacGes dessa estrutura, 3.3.1 Representagao e operagées das pilhas De forma similar a uma fila, a pilha poderia ser implementada como um vetor (array), mas terlamos as ‘mesmas limitagdes: no caso de aumento da pilha, terfamos que declarar um novo vetor e copiar os valores para o novo (ZIVIANI, 2012), Além disso, ao retirar ou ao acrescentar um item na pilha, todos os elementos ja existentes teriam que ser movidos. Para alguns objetos e ambientes, essas operarGes poderiam ser proibitivas. Assim, utilizando 0 conceito de classe, a figura a seguir traz uma representaco sugerida para a pilha e suas operagées. A pilha implementada retrata a ordem de entrega de pizzas, de acordo com a rota definida previamente. hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 17125 sornarz0z4, 17:52 Estrutura de Dados 1Y class PilhaEntregaPizza{ 2 private Pizza topoPilha; s) //métodos 4 public void insereTopo(Pizza novaPizza){ } public Pizza retiraTopo(){ } 6 public boolean estaVazia(){ } 7 3 8Y class Pizzaf 9 private String nomeDestinatario; 10 private String enderecoDestinatario; 11 private Pizza prox; 12 § Figura 9 - Implementago de uma pilha de processos em Java Fonte: Elaborada pela autora, 2019. ‘WPraCegoVer: A imagem mostra um trecho de cédigo de 12 linhas de programa, Enumerando cada linha temos: Linha 1; class PilhaEntregaPizza{ Lina 2: private Piza topoPitha; Linha 3: //métodos Linha 4: public void insereTopo( Pizza novaPizza){} Linha 5: public Pizza retiraTopo() { } Linha 6; public boolean estaVazia() { } Linha 7:) Linha 8: lass Pizal Linha 9: privat String nomeDestinataio; Linha 10: private String enderecoDestinatario; Linha 11: private Pizza prox Linha 12:) Temos, aqui, que a pilha é representada pela classe “PilhalintregaPizza’. HA a necessidade de se manter a referéncia para o topo da pilha, jé que tanto a insergo quanto a retirada ocorrem pelo topo. As pizzas, entio, terdo que ser armazenadas no compartimento de entrega na ordem inversa, Assim, quando 0 entregador for realizar a entrega, as pizzas jd estario organizadas de forma que a mais préxima ao topo sera entregue antes que aquelas mais distantes do topo. A terceira operacio definida é a que verifica se a pilha est vazia. Cada pizza 6 representada por dots atributos: nome do destinatério e enderego de entrega, tips:fcodely-ru-contents smazonaws comiMoodle/EADIConteudsiCTI_ESTDAD_19lunidade_slebooklindex. him! 18125 sornarz0z4, 17:52 Estrtura de Dados VAMOS PRATICAR? CCrie duas classes Java denominadas “Piza’ e "PilhaEntregaPizza’, Copie apresentado na Figura 9. A classe "Pizza" deve ter dois atributos do tip (nome e endereso do destinatério da pizza) © um atributo do tipo p, aponta para o préximo elementos da “Pilha’, Adicione um construtor n “PilhaEntregaPizza" que inicaliza 0 topo da pilha com o valor null. Implen métodes para inserit Topo” (empilhar) e "removerTopo" (desempilhar) | da pilha. Lembre-se de que, para adicionar ou remover um elemento n vvoot precisa acessar o elemento apontado pelo atributo topoDaPith cempilnar um novo elemento, devemos criar um objeto do tipe "Pizza, faze atributo prox da nova "Pizza" aponte para o elemento no topoDaPilha atu depois, fazer com o que atributo topoDaPilha aponte para 0 novo objeto Pizza" criado, Para desempithar uma "Pizza" da pilha vocé tem que sele elemento apontado pelo topoDaPilha e fazer com que este aponte para apontada pelo atributo prox desse primeiro elemento, Na sequéncia, vamos conhecer algumas aplicagées priticas das pilhas. 3.3.2 Aplicagées praticas das pilhas © uso de pilhas é bastante comum em algoritmos que realizam a avaliagdo de expresses matemdticas. Por exemplo, na notagio denominada “polonesa’, os operadores aparecem imediatamente antes dos operandos. Tal notagao define quals operadores e em que ordem devem ser calculados, Assim, dispensa o uso de parénteses, sem ambiguidades Digamos, por exemplo, que precisamos avaliar a expresso A* B -C / D. Usando a notagio polonesa, a mesma expressio seria -* AB / C D. A notagio dita “polonesa reversa’ (posfit) 6 como a polonesa, em que os operands aparecem apés os operadores. No exemplo, a expressio seria AB * CD /-. Poderfamos utilizar uma estrutura do tipo pilha e inserir os elementos na ordem polonesa reversa, Dessa forma, inicialmente, seriam desempilhados os valores de Ae B. Ao desempilhar o operador *, seria feita a multiplicagdo AB. Em seguida, seriam desempilhados os valores de C e D. Em seguida, ao ler o operador /, seria feita a divisdo de C por D. Ao final, é desempilhado o operador-. Assim, o resultado A*B é decrementado do resultado de C/D. hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 19925 sornarz0z4, 17:52 Estrtura de Dados VOCE SABIA? A execugdo de um sistema computacional, independentemente da plataforma, funciona sobre o conceito de pilha de execucio. Uma pilha de ecugio ou pilh de chamada armazena informagies sobre as sub-rotinas ativas em um programa dde computador. Seu principal uso é registrar 0 ponto em que cada sub-rotina ativa deve retornar 0 controle de execuglo quando terminar de executar. Quando ‘estamos depurando um cédigo, estamos montando essa pilha mentalmente, pois 2 ideia é visualizar o trajeto que o flaxo de execugio do programa fez Na préxima secéo veremos um exemplo pritico da aplicagao de pilhas na API da linguagem Java. Acompanhe com atengao! 3.3.3 Implementagao de pilhas com API Java A API do ambiente de execugio Java contém uma série de bibliotecas que estéo disponiveis para serem utlizadas pelos sistemas desenvolvidos com essa tecnologia, Entre as classes disponivels, temos a stack, que implementa uma pilha. Ela implementa o mecanismo LIFO (last in, frst out), em que o iitimo elemento a entrar na pilha é 0 primeira a saix. Em outras palavras, tanto a inserrao quanto a retirada de elementos cocorrem pelo topo da pilha A figura abaixo foi extraida da documentacao da classe stack, hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 2075 sornarz0z4, 17:52 Estrutura de Dados Module java.base Package java.util Class Stack java.lang.Object java.util. AbstractCollection java.util. AbstractList java.util. Vector java.util.Stack Figura 10 - Hierarquia e definigao do pacote em que a classe stack esta inserida Fonte: Flaborada pela autora, 2019. ‘#PraCegoVer: A imagem mostra a hierarquia em que est4 organizada a classe stack. Mostrando a hierarquia de cima para baixo temos: Class Stack javalang Object, java.util AbstractCollection Javautil,VectoreE> Javavutil Stack Conforme apresentado na figura anterior, a classe stack estd inserida dentro do pacote java.util. Assim, para utiliza, énecessério usar, explicitamente, a diretiva import, seguida do nome do pacote: import java.util Além disso, a figura também nos informa que a classe stack estende a classe vector com cinco operagées que viabilizam que um vetor trabalhe como uma pilha, Eas cinco operagSes sot inserir um elemento napilha ou empilhar(pust), remover o elemento do topo da pilha ou desempilhar (pop), lero elemento que esté no topo da pilha (peek), verificar se a pila esti vazia (empty) e buscar por um elemento na pilha e retornar 0 quo Jonge ele esta do topo (search). 0 topo da pilha é definido como sendo a posiglo de mimero 1 e a operacso retorna a posicao do primeiro elemento encontrado. Para eriar uma pilha temos que criar um objeto dessa classe: Stack pilha = new Stack(). Quando uma pilha & criads, ela esti inicialmente, vazia. A funcio push) recebe como parimetro um object, portanto, para armazenar primitives, seri necessério armazenar uma classe wrapper (integer, double lat et). As fungbes 1pop()e search() retornam um objeto. tips:fcodely-ru-contents smazonaws comiMoodle/EADIConteudsiCTI_ESTDAD_19lunidade_slebooklindex. him! 21s: sornarz0z4, 17:52 Estrutura de Dados CASO ‘Vamos criar como exemplo uma pilha de elementos do tipo lnteire, Os valores serio gerados aleatoriamente com 0 auxiio da classe random. A partir de um objeto dessa classe, é possivel gerar um valor inteiro entre 0 e 0 nimero informado como pardmetro para o método nextint(). Vejamos a trecho de cédigo, a seguir: “#PraCegoVer: A imagem mostra um trecho de cédigo de 14 linhas de programa. Enumerando cada linha temos: Linha 1: Stack pha = new Stack(); // era un objeto da classe Stack Linha 2: // era objeto que permitird a geragio dos mimerosaleatérios Linha 3: Random random = new Random(); linha 4 //lago for executa 10 vezes Linha 5: Systemoutprintia(">> Inserdas na pilha os valores") Linha 6:for (int i= 0;1< 15564} Linha 7: //Insere na pilha os mimeros aleatérias entre 0 a 100 Linha 8: Systemoutprintin((i+1)) +" + pilbapush(randomanextint(100))); Linha 9:} Linha 10: // Retira da pilra 05 10 elementos Linha 11: Systemoutprintin("<< Remavidos da pha os valores: ") Lina 12: for (inti = 0;i< 10; +4)( Linha 13; Systemoutprintin((-1)) + ":* + pllhapop0); linha 14: ‘Asa(da para o cédigo anterior esté apresentada na figura na sequéncia, >> Anseridos na pilha os valores: ntips:lcodely-Imu-contents3.amazonaws convMoodle/EAD/Conteuds/CTI_ESTDAD_19lunidade_s/ebooklindex. him! 2275: sornarz0z4, 17:52 Estrutura de Dados PraCegoVer: A imagem mostra a saida de um programa, Ao tedo so 22 linha fem que cada linha mostra um valor diferente que fol impresso na tela Enumerando cada linha temos: Lina 1 >> Inserides na pilha os valores inba 2:1: 17 Lina 3: 2:21 Lina 4: 3:14 Linba §: 4:18 Linha 6: 5:84 Linha 7: 6:56 Lnba 8: 7:78 Linha 9: 8: 65 Lina 10; 9:34 Linha 11: 10: 46 Linha 12: << Removides da pilha os valores: Lina 13: 1:46 Linha 14: 2:34 Linha 15: 3:65, Lina 16: 4:78 inha 17: 5:56 Lina 18: 6: 84 Lnba 19: 7:18 Lina 20: 8:14 Lina 21: 9:21 Lina 22: 10: 17 Observe que, conforme o esperado, a ordem de retirada & exatamente o inverso dda ordem de insergio. Se voc executar esse cdigo na sua miquina, a safda seré diferente, pois 0 gerador de mimeros aleatérios iri se encarregar da exclusividade dos valores numéricos na pilha gerada, Dessa forma, temos que as estruturas de dados sdo importantes elementos para a construgdo de sistemas ‘computacionais, independentemente, da plataforma. A escolha correta dessa estrutura vai proporcionar a0 programador as ferramentas certas para a manipulaydo dos dados. £ importante, também, observar que os conceitos estio bem atrelados ao uso dos termos em nosso cotidiano, Isso nos auxilia quanto 20 entendimento da estrutura, Sintese Chegamos ao fim de mais uma unidade, Aqui, estudamos a respeito dos trés tipos bisicos de estruturas de dados: listas,filas e pilhas. Vimos que a forma de armazenamento e as operacSes disponiveis para cada uma delas est diretamente relacionada com © comportamento esperado da aplicagéo. Além disso, também pudemos aprender quanto a um exemplo pratico de pilhas na APL Nesta unidade, vocé teve a oportunidade de: hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 2a5 sornarz0z4, 17:52 Eetrtura de Dados * compreender que as estruturas de dados lista, fila e pilha se diferenciam, especialmente, pela ordem com que os elementos so inseridos e retirados em cada estrutura; * identifica a diferenga entre uma estrutura de dados estatica e dinamica, sendo que cada tipo tem vantagens e desvantagens de uso; * entender que os conceitos, apesar de tedricos, tentam imitar as aplicagées praticas do dia a dia; © conhecer algumas bibliotecas da linguagem Java que ja implementam aplicacées comuns dessas estruturas para finalidades especificas. “@ Clique para baixar o contetido deste tema. Bibliografia As NCIO, A. F G3 ARAUIO, GS Estrutura de dados: algoritmos, andlise da complexidade e plementagdes em Java e C/C++. Sio Paulo: Pearson, 2010. DEVMEDIA. Como implementar a troca de mensagens com JMS. 2012, Disponivel em:https://vww.devmedia.com.br/como-implementar-a-troca-de-mensagens-com-jms/25127 (attps://www.devmedia.com.br/como-implementar-a-troca-de-mensagens-com-jms/25127). Acesso em: 30 jul. 2019. DEVMEDIA, Fila circular dindmica, 2012, Disponivel em: https://www.devmedia,com.br/fila-circular- dinamica/24572 (https://www.devmedia.com.br/fila-circular-dinamica/24572}, Acesso em: 30 jul. 2019. PUGA, S; RISSETT, G. Logica de programagio e estruturas de dados - Com aplicagdes em Java, 3. ed. Sio Paulo: Pearson, 2010, ROBER’ Conhega o cientista considerado o ‘guia espiritual’ dos algoritmos. Estado, Nova York, 2018. Disponivel em: httpsi//internactonal.estadao.com.br/noticias /nytiw,conheca-o-cientista-considerado-o-guia- espiritual-dos-algoritmos,70002654893 _(https://internacional.estadao.com.br/noticias /nytiw,conheca-o- cientista-considerado-o-guia-espiritual-dos-algoritmos, 70002654893). Acesso em: 30 jul. 2019 ‘TAMASSIA, R; GOODRICH, M. T. Estruturas de dados e algoritmos em Java. Porto Alegre: Grupo A, 2011. ZIVIANI, N. Projeto de algoritmos: com implementagSes em JAVA ¢ C++. 3. ed. So Paulo: Cengage Learning Eaitores, 2012 hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 2ans: sornarz0z4, 17:52 Estrutura de Dados ntips:lcodely-Imu-contents3.amazonaws convMoodle/EAD/Conteuds/CTI_ESTDAD_19lunidade_s/ebooklindex. him! 2575

Você também pode gostar