0 notas 0% acharam este documento útil (0 voto) 33 visualizações 25 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.
Título e descrição aprimorados por IA
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
Ir para itens anteriores Ir para os próximos itens
Salvar ESTRUTURA DE DADOS para ler mais tarde
sornarz0z4, 17:52 Estrutura de Dados
ESTRUTURA DE DADOS
UNIDADE 3 - LISTA, FILA E PILHA
Katia Cristina Lage dos Santossornarz0z4, 17:52 Estrtura de Dados
hitpsilcodelyfmu-content.s3.amazonaws.conyMeodle/EAD/Contsuda/CT|_ESTDAD_t9/unicads_slebooktindex.himl 2105sornare0z4, 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 3125sornarz0z4, 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 425sornarz0z4, 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! 525sornarz0z4, 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! 625sornarz0z4, 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! 725sornarz0z4, 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! 8125sornarz0z4, 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! 9125sornarz0z4, 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
10125sornarz0z4, 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 115sornarz0z4, 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 1205sornarz0z4, 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!
13925sornarz0z4, 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 1425sornarz0z4, 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
18125tovran02s 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 16125sornarz0z4, 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 17125sornarz0z4, 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! 18125sornarz0z4, 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 19925sornarz0z4, 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 2075sornarz0z4, 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
2a5sornarz0z4, 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