Estrutura de Dados - Cap 3
Estrutura de Dados - Cap 3
Estrutura de Dados - Cap 3
ESTRUTURA DE DADOS
UNIDADE 3 – LISTA, FILA E PILHA
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 1/24
24/03/2022 21:55 Estrutura de Dados
Introdução
Um tipo abstrato de dados é formado por um mecanismo de armazenamento e um conjunto de operaçõ es
quanto a esses dados. Uma analogia interessante é uma sala de aula, em que os elementos que a formam são
as mesas e as cadeiras, dispostas sequencialmente. Algumas operaçõ es que podem ser aplicadas sobre esses
dados seriam mover a cadeira, escrever sobre a mesa, entre outras. No entanto, e se quiséssemos criar um
mecanismo mais elaborado para definir a inclusão ou remoção de novas mesas e cadeiras na sala?
Os aspectos relacionados à inserção e retirada de elementos em uma estrutura de dados são operaçõ es muito
recorrentes. De acordo com a ordem em que esses elementos são 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 é a complexidade disso para
entendermos as estruturas?
Nesta unidade, veremos os conceitos de fila, pilha e lista, que, assim como diversos outros na área de Ciência
da Computação, visam imitar os conceitos do mundo real. Essa abstração será importante para
compreendermos a definição e, com a prática, aplicarmos a estrutura correta para cada situação.
Além disso, aprenderemos que, independentemente do paradigma de programação adotado, o conceito das
estruturas de dados será o mesmo. Projetos de expressão nacional, como o Sistema Pú blico de Escrituração
Digital, é um exemplo, pois utilizam o conceito de filas para realizar o processamento das notas fiscais.
Vamos, então, iniciar nossos estudos. Acompanhe!
3.1 Lista
O termo “lista” é comumente empregado no dia a dia. Temos listas de tarefas, de supermercados 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 ou
não ter repetição do mesmo item. De maneira mais simples, poderíamos representar uma lista como uma
sequência de itens:
• Arroz
• Feijão
• Sabão em pó
• Detergente
• Leite
• Café
Só que as listas também podem ser mais elaboradas. Se, por exemplo, pensarmos em agrupar os itens
anteriores em categorias, poderíamos ter uma representação um pouco diferente, como:
1. Alimentos
- arroz;
- feijão;
- leite;
- café.
2. Limpeza:
- sabão em pó ;
- detergente.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 2/24
24/03/2022 21:55 Estrutura de Dados
Nas duas representaçõ es de listas, é possível perceber que, quando vamos fazer a leitura, inserir ou retirar um
elemento, podemos realizar a ação de forma arbitrária. Por exemplo, imagine a situação de ter uma dessas
listas para fazer compras no supermercado: poderíamos ler item a item, na ordem, e ir marcando aqueles que
já estão no carrinho de compras. Assim, essas características são mimetizadas na estrutura de dados de
mesmo nome.
Na linguagem Java, a forma mais simples para armazenar os elementos de uma lista é com o uso de vetores
(arrays), também conhecidas como listas implementadas com arrays (PUGA; RISSETTI, 2010). Entretanto,
como a inserção ou retirada de elementos pode ocorrer em qualquer posição do vetor, existem maneiras
diferentes de implementar essa estrutura de dados.
No item a seguir, veremos os tipos de listas e como a implementação delas pode ser feita com o uso de
classes.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 3/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra uma representação de uma lista encadeada. A representação é feita
utilizando 4 retângulos, um ao lado do outro, em que cada cada retângulo está conectado com o retângulo da
frente. O primeiro retângulo possui uma indicação dizendo "Primeiro"e o ú ltimo retângulo possui uma
indicação dizendo "NULL".
Uma lista encadeada, então, corresponde a uma estrutura iniciada pela definição de um elemento que “aponta”
para o início da lista. Na figura anterior, o elemento “primeiro” está indicando qual é o primeiro item da lista.
Cada elemento é formado por duas partes: uma informação e uma referência (pró ximo) para o pró ximo
elemento da lista. Isto ocorre para todos os elementos, até que seja alcançado o ú ltimo. Este, de forma
diferenciada, tem um marcador para indicar o fim da lista. Geralmente, o marcador utilizado para o fim da
lista é o valor null.
VOCÊ O CONHECE?
Donald Ervin Knuth é um cientista da computaçã o de renome e professor emé rito da
Universidade de Stanford. Ele é comumente referenciado pelas aná lises cuidadosas de
algoritmos clá ssicos da Ciê ncia da Computaçã o. Autor do livro “A arte da Ciê ncia da
Computaçã o”, uma das principais referê ncias da á rea, Knuth també m é o criador do
sistema tipográ fico TEX, bastante utilizado para a construçã o de artigos científicos
(ROBERTS, 2018). Vale conhecermos mais sobre ele!
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 4/24
24/03/2022 21:55 Estrutura de Dados
Para a representação 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 informação e uma referência (prox)
para o pró ximo item da lista.
#PraCegoVer: A imagem mostra um trecho de có digo de 8 linhas de programa. Enumerando cada linha temos:
Linha 3: }
Linha 4:
Linha 8: }
A lista apresentada é chamada de “simplesmente encadeada”, pois, para cada célula ou item, há a indicação
apenas do pró ximo elemento da lista.
No entanto, existe outro tipo de lista em que há, também, um indicador para o elemento anterior. Como há
uma indicação dupla, a lista é chamada de “duplamente encadeada”. Veja a figura a seguir que retrata o
conceito.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 5/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra uma representação visual de uma lista duplamente encadeada. Nesta
representação temos vários retângulos em que cada retângulo possui uma conexão do lado direito e uma
conexão do lado esquerdo. Estas conexõ es simbolizam referências para outros retângulos.
Para a representação em Java da lista duplamente encadeada, iremos acrescentar uma referência para o ú ltimo
item, na classe “lista”, assim como também será adicionado um atributo do tipo “ItemLista” na classe de
mesmo nome, representando a informação e uma referência (ant) para o elemento anterior do item. Observe a
figura a seguir.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 6/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra um trecho de có digo de 10 linhas de programa. Enumerando cada linha
temos:
Linha 4: }
Linha 5:
Linha 10: }
Agora que já vimos o conceito de listas e os principais tipos, vamos estudar sobre as principais operaçõ es
com essa estrutura de dados.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 7/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra um trecho de có digo de 10 linhas. Enumerando cada linha temos:
Linha 3: //métodos
Linha 10: }
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 8/24
24/03/2022 21:55 Estrutura de Dados
No exemplo do “ItemLista”, o critério de comparação poderia ser o mesmo valor do atributo info. Ao ler um
elemento da lista, deve ser passada a posição que ele ocupa. Observe que tal comportamento é o mesmo
implementado quando acessamos um item em um vetor (array). O método que retorna o tamanho da lista é
muito interessante, podendo ser utilizado tanto nos algoritmos de busca quanto nos algoritmos de ordenação:
devemos visitar todos os itens da lista até encontrar o final da estrutura.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1jk… 9/24
24/03/2022 21:55 Estrutura de Dados
VAMOS PRATICAR?
Crie duas classes Java denominadas “ItemLista” e “Lista”. Copie os
apresentados nas Figuras 2 e 5 e adicione um construtor na classe “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” criado. Para remo
item da lista, você tem que selecionar o elemento prox do elemento an
iniciá -lo com o valor do elemento apontado pelo atributo prox do eleme
está sendo removido.
Por fim, o método retorna um valor verdadeiro (true) ou falso (false), dependendo se o elemento passado
como parâmetro foi encontrado na lista. Novamente, no exemplo do “ItemLista”, o critério de comparação
poderia ser o mesmo valor do atributo info.
Ao elaborar as listas de presença, os itens (alunos) são dispostos em ordem crescente do atributo
de nome. Neste caso, é interessante observar como a estrutura de dados pode ser empregada
pelos algoritmos de ordenação. O algoritmo de ordenação pelo nome, no caso, seria
implementado dentro da classe “lista”.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 10/24
24/03/2022 21:55 Estrutura de Dados
Outra aplicação muito comum para as listas é na definição dos passos em um processo. Como
vimos nas operaçõ es de um elemento do tipo “ItemLista”, ao adicionar um elemento, podemos
optar pela sua inserção no final da lista ou em uma posição específica. A posição, nesse contexto,
seria a ordem em que determinada tarefa deve ser realizada, sendo que a tarefa 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,
hospitais, cinemas, entre outros. Contudo, precisamos pensar que elas são essenciais, uma vez que
determinam a ordem de atendimento das pessoas. Dessa forma, temos que os elementos de uma fila são
acessados de acordo com a posição em que ocupam.
A construção de uma fila parte do princípio de que o primeiro a chegar é o primeiro a ser atendido. Nas filas
dos supermercados, por exemplo, as pessoas são atendidas conforme a ordem de chegada, não é? Quando o
primeiro da fila é chamado, a fila "anda", ou seja, o segundo passa a ser o primeiro, o terceiro passa a ser o
segundo, e assim por diante, até chegarmos a ú ltima pessoa. Normalmente, para entrar em uma fila, uma
pessoa deve se colocar na ú ltima posição, ou seja, no fim. Assim, quem chega primeiro tem prioridade.
A figura a seguir representa uma fila.
#PraCegoVer: A imagem mostra uma representação de uma fila. No início 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 dados devem ser retirados do
início da fila e devem ser enfileirados no início da fila.
Conforme podemos observar na figura anterior, a estrutura fila se assemelha muito com a estrutura lista. O
grande detalhe está nas operaçõ es de inserção (enfileirar) e remoção de um item (desenfileirar), que devem
ocorrer de acordo com a ordem indicada pelos nú meros 1, 2, 3 …, n. Dizemos, neste caso, que as filas têm
operaçõ es mais restritas que as listas.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 11/24
24/03/2022 21:55 Estrutura de Dados
Já para desenfileirar um elemento, acessamos sempre o primeiro elemento da fila. Em seguida, precisamos
atualizar a fila, passando o segundo elemento para a primeira posição, o terceiro elemento para a segunda
posição, e assim sucessivamente.
Além do fato de sempre ter que atualizar os elementos em caso de retirada de um item da fila, essa
representação é limitada, também, pelo tamanho inicial definido para o vetor. Se for necessário inserir um
elemento a mais que o tamanho inicialmente definido, torna-se necessário declarar um novo vetor com
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
operaçõ es necessárias conforme o có digo retratado na figura a seguir.
#PraCegoVer: A imagem mostra um trecho de có digo de 13 linhas. Enumerando cada linha temos:
Linha 4: //métodos
Linha 9: }
Linha 13: }
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 12/24
24/03/2022 21:55 Estrutura de Dados
No có digo, uma fila tem uma referência para o primeiro e para o ú ltimo elemento. Isto é importante porque a
operação de enfileirar precisa da informação de quem é o ú ltimo item da fila; enquanto a operação de
desenfileirar necessita da referência para o primeiro elemento. A operação obtemPosicao retorna à posição
ocupada pela pessoa passada como parâmetro. Por fim, a operação estaVazia retorna verdadeiro (true) caso a
fila esteja vazia, sendo que, do contrário, retorna falso (false).
VAMOS PRATICAR?
Crie duas classes Java denominadas “Pessoa” e “FilaPessoa”. Copie o
apresentado na Figura 7. A classe “Pessoa” deve ter dois atributos do tip
(nome e CPF) e um atributo do tipo “Pessoa” com o valor prox. Adici
construtor na classe “FilaPessoas” que inicialize os atributos primeiraD
ultimoDaFila com o valor null. Este caso reflete a fila no início do expedi
instituiçã o em que a fila de pessoas é formada, ou seja, a fila inicialme
vazia. Implemente, entã o, os mé todos para enfileirar e desenfileirar um
fila. Lembre-se de que, para adicionar um elemento, você precisa criar um
do tipo “Pessoa” e, depois, fazer com o que atributo prox do elemento
aponte para o novo objeto do tipo “Pessoa” criado. Para desenfileirar, v
que selecionar o elemento primeiraDaFila e iniciá -lo com o valor do e
apontado pelo atributo prox do elemento que está sendo desenfileirado.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 13/24
24/03/2022 21:55 Estrutura de Dados
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 14/24
24/03/2022 21:55 Estrutura de Dados
VOCÊ SABIA?
A Java Message Service, especificaçã o JSR-914, tem como objetivo o processo de
troca de mensagens entre sistemas. Ela define dois padrões para o
armazenamento de mensagens: queue (fila) e topic (tópico). A troca de
mensagens pode ser usada em projetos de integraçã o entre aplicações, sistemas
de sincronizaçã o de banco de dados ou para um sistema de chat (DEVMEDIA,
2012).
Apesar de termos APIs e frameworks que já implementam grande parte das operaçõ 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 é o de pilha. Vamos conhecer sobre ele e entender suas
aplicaçõ es no tó pico a seguir. Acompanhe!
3.3 Pilha
O conceito de pilha está igualmente relacionado ao termo utilizado em nosso dia a dia. Assim, temos a pilha
de livros, a pilha de pratos, a pilha de processos, entre tantas outras.
Outro cenário comum para o uso do conceito é em uma fábrica de produção ou montagem de produtos.
Determinado produto é composto por inú meras peças (p1, p2, ..., pn), sendo que seu processo de montagem é
automático (executado por uma máquina) e exige que as peças sejam colocadas em ordem específica
(primeiro a p1, depois a p2, depois a p3, e assim por diante). As peças, então, são empilhadas na ordem
adequada e a máquina de montagem vai retirando peça por peça do topo da pilha para montar o produto final.
A figura a seguir representa uma pilha.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 15/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra uma representação visual de uma pilha. A imagem enfatiza que os dados são
empilhados no topo da pilha e são desempilhados do topo da pilha.
Conforme pode ser identificado na figura anterior, a pilha tem uma definição muito similar ao de uma fila,
com a diferença de que a inserção e a remoção de elementos ocorrem a partir de um mesmo ponto: o topo da
pilha.
No item a seguir, veremos a representação e as principais operaçõ es dessa estrutura.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 16/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra um trecho de có digo de 12 linhas de programa. Enumerando cada linha
temos:
Linha 3: //métodos
Linha 7: }
Linha 12: }
Temos, aqui, que a pilha é representada pela classe “PilhaEntregaPizza”. Há a necessidade de se manter a
referência para o topo da pilha, já que tanto a inserção quanto a retirada ocorrem pelo topo. As pizzas, então,
terão que ser armazenadas no compartimento de entrega na ordem inversa. Assim, quando o entregador for
realizar a entrega, as pizzas já estarão organizadas de forma que a mais pró xima ao topo será entregue antes
que aquelas mais distantes do topo. A terceira operação definida é a que verifica se a pilha está vazia. Cada
pizza é representada por dois atributos: nome do destinatário e endereço de entrega.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 17/24
24/03/2022 21:55 Estrutura de Dados
VAMOS PRATICAR?
Crie duas classes Java denominadas “Pizza” e “PilhaEntregaPizza”. Copie o
apresentado na Figura 9. A classe “Pizza” deve ter dois atributos do tip
(nome e endereço do destinatá rio da pizza) e um atributo do tipo p
aponta para o próximo elementos da “Pilha”. Adicione um construtor n
“PilhaEntregaPizza” que inicializa o topo da pilha com o valor null. Implem
mé todos para “inserirTopo” (empilhar) e “removerTopo” (desempilhar) u
da pilha. Lembre-se de que, para adicionar ou remover um elemento n
você precisa acessar o elemento apontado pelo atributo topoDaPilh
empilhar um novo elemento, devemos criar um objeto do tipo “Pizza”, faze
atributo prox da nova “Pizza” aponte para o elemento no topoDaPilha atu
e, depois, fazer com o que atributo topoDaPilha aponte para o novo objeto
“Pizza” criado. Para desempilhar uma “Pizza” da pilha você tem que sele
elemento apontado pelo topoDaPilha e fazer com que este aponte para
apontado pelo atributo prox desse primeiro elemento.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 18/24
24/03/2022 21:55 Estrutura de Dados
VOCÊ SABIA?
A execuçã o de um sistema computacional, independentemente da plataforma,
funciona sobre o conceito de pilha de execuçã o. Uma pilha de execuçã o ou pilha
de chamada armazena informações sobre as sub-rotinas ativas em um programa
de computador. Seu principal uso é registrar o ponto em que cada sub-rotina ativa
deve retornar o controle de execuçã o quando terminar de executar. Quando
estamos depurando um código, estamos montando essa pilha mentalmente, pois a
ideia é visualizar o trajeto que o fluxo de execuçã o do programa fez.
Na pró xima seção veremos um exemplo prático da aplicação de pilhas na API da linguagem Java. Acompanhe
com atenção!
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 19/24
24/03/2022 21:55 Estrutura de Dados
#PraCegoVer: A imagem mostra a hierarquia em que está organizada a classe stack. Mostrando a hierarquia
de cima para baixo temos:
Class Stack<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.Vector<E>
java.util.Stack<E>
Conforme apresentado na figura anterior, a classe stack está inserida dentro do pacote java.util. Assim, para
utilizá-la, é 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 operaçõ es que
viabilizam que um vetor trabalhe como uma pilha. Essas cinco operaçõ es são: inserir um elemento na pilha
ou empilhar (push), remover o elemento do topo da pilha ou desempilhar (pop), ler o elemento que está no
topo da pilha (peek), verificar se a pilha está vazia (empty) e buscar por um elemento na pilha e retornar o
quão longe ele está do topo (search). O topo da pilha é definido como sendo a posição de nú mero 1 e a
operação retorna à posição do primeiro elemento encontrado.
Para criar uma pilha temos que criar um objeto dessa classe: Stack pilha = new Stack(). Quando uma pilha é
criada, ela está, inicialmente, vazia. A função push() recebe como parâmetro um object, portanto, para
armazenar primitivos, será necessário armazenar uma classe wrapper (integer, double, float etc.). As funçõ es
pop() e search() retornam um objeto.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 20/24
24/03/2022 21:55 Estrutura de Dados
CASO
Vamos criar como exemplo uma pilha de elementos do tipo inteiro. Os valores
serã o gerados aleatoriamente com o auxílio da classe random. A partir de um
objeto dessa classe, é possível gerar um valor inteiro entre 0 e o nú mero
informado como parâ metro para o mé todo nextInt(). Vejamos a trecho de código
a seguir:
Linha 9: }
Linha 14: }
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 21/24
24/03/2022 21:55 Estrutura de Dados
Linha 3: 2: 21
Linha 4: 3: 14
Linha 5: 4: 18
Linha 6: 5: 84
Linha 7: 6: 56
Linha 8: 7: 78
Linha 9: 8: 65
Linha 10: 9: 34
Linha 13: 1: 46
Linha 14: 2: 34
Linha 15: 3: 65
Linha 16: 4: 78
Linha 17: 5: 56
Linha 18: 6: 84
Linha 19: 7: 18
Linha 20: 8: 14
Linha 21: 9: 21
Dessa forma, temos que as estruturas de dados são importantes elementos para a construção de sistemas
computacionais, independentemente, da plataforma. A escolha correta dessa estrutura vai proporcionar ao
programador as ferramentas certas para a manipulação dos dados. É importante, também, observar que os
conceitos estão bem atrelados ao uso dos termos em nosso cotidiano. Isso nos auxilia quanto ao
entendimento da estrutura.
Síntese
Chegamos ao fim de mais uma unidade. Aqui, estudamos a respeito dos três tipos básicos de estruturas de
dados: listas, filas e pilhas. Vimos que a forma de armazenamento e as operaçõ es disponíveis para cada uma
delas está diretamente relacionada com o comportamento esperado da aplicação. Além disso, também
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 22/24
24/03/2022 21:55 Estrutura de Dados
Bibliografia
ASCENCIO, A. F. G.; ARAÚ JO, G. S. Estrutura de dados: algoritmos, análise da complexidade e
implementaçõ es em Java e C/C++. São Paulo: Pearson, 2010.
DEVMEDIA. Como implementar a troca de mensagens com JMS. 2012. Disponível
em:https://www.devmedia.com.br/como-implementar-a-troca-de-mensagens-com-jms/25127
(https://www.devmedia.com.br/como-implementar-a-troca-de-mensagens-com-jms/25127). Acesso em: 30
jul. 2019.
DEVMEDIA. Fila circular dinâmica. 2012. Disponível 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.; RISSETTI, G. Lógica de programação e estruturas de dados – Com aplicações em Java. 3. ed.
São Paulo: Pearson, 2010.
ROBERTS, S. Conheça o cientista considerado o 'guia espiritual' dos algoritmos. Estadão, Nova York, 2018.
Disponível em: https://internacional.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 implementaçõ es em JAVA e C++. 3. ed. São Paulo: Cengage Learning
Editores, 2012.
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 23/24
24/03/2022 21:55 Estrutura de Dados
https://student.ulife.com.br/ContentPlayer/Index?cd=rB2RIqa0BoG7U2ca5oAqIg%3d%3d&l=dD37cIQhBootyjxtwF5pgg%3d%3d&lc=bRPc3b1j… 24/24