Escolar Documentos
Profissional Documentos
Cultura Documentos
ESPECÍFICOS
Estrutura de Dados e Algoritmos
Livro Eletrônico
Presidente: Gabriel Granjeiro
Vice-Presidente: Rodrigo Calado
Diretora de Produção Educacional: Vivian Higashi
Gerência de Produção de Conteúdo: Magno Coimbra
Todo o material desta apostila (incluídos textos e imagens) está protegido por direitos autorais
do Gran Cursos Online. Será proibida toda forma de plágio, cópia, reprodução ou qualquer
outra forma de uso, não autorizada expressamente, seja ela onerosa ou não, sujeitando-se o
transgressor às penalidades previstas civil e criminalmente.
CÓDIGO:
230130316014
SÉRGIO SIERRO
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
SUMÁRIO
Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Estrutura de Dados e Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1. Estrutura de Dados e Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1. Introdução. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2. Tipos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3. Estrutura de Dados Lineares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4. Estrutura de Dados Não Lineares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5. Vetores e Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7. Filas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.8. Pilhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.9. Árvores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.10. Grafos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.11. Tabela de Hash ou Tabela de Dispersão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.12. Algoritmos de Busca Sequencial e Busca Binária . . . . . . . . . . . . . . . . . . . . . . 26
1.13. Algoritmos de Ordenação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Resumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Questões de Concurso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Gabarito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Gabarito Comentado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 3 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
APRESENTAÇÃO
Olá, concurseiro! Tudo bem?
Sou o Prof. Sergio Sierro. Atualmente sou servidor no TRF 1ª Região, pós-graduado em
Gestão de Tecnologia da Informação e Banco de Dados e Business Intelligence, além de ser
professor de diversas disciplinas de tecnologia da informação para concursos públicos. Faço
parte do Gran Cursos desde 2019 e é um prazer estar com você aqui nessa aula.
Eu e todo a equipe do Gran Cursos estamos aqui para te dar o máximo de dicas, teorias,
exercícios, respondendo questões de provas anteriores e criando questões inéditas para
que você esteja preparado no momento da sua prova.
Em nossa aula, vamos falar sobre estrutura de dados e algoritmos, que são conceitos
fundamentais para programação eficiente e otimizada. Vamos abordar alguns tópicos
importantes como:
• Busca Sequencial e Busca Binária: A busca sequencial é um algoritmo simples e fácil
de implementar que percorre um conjunto de dados de forma linear até encontrar o
elemento desejado. Porém, sua complexidade é O(n), o que significa que o tempo de
execução cresce linearmente com o tamanho do conjunto de dados. A busca binária,
por sua vez, é um algoritmo mais eficiente que reduz pela metade a quantidade de
elementos a serem percorridos a cada iteração. Isso resulta em uma complexidade
O(log n), tornando-o ideal para conjuntos de dados maiores.
• Ordenação: É o processo de rearranjar os elementos de um conjunto de dados de
acordo com uma chave específica, geralmente em ordem crescente ou decrescente.
Existem diversos algoritmos de ordenação, como o Bubble Sort, Selection Sort,
Insertion Sort, Merge Sort e Quick Sort, cada um com vantagens e desvantagens
dependendo do contexto e tamanho do conjunto de dados.
• Listas: São estruturas de dados que permitem o armazenamento de um conjunto de
elementos em uma ordem específica. Existem diversos tipos de listas, como a lista
simplesmente encadeada, lista duplamente encadeada e lista circular, cada uma com
suas particularidades.
• Pilhas: São estruturas de dados que permitem o armazenamento de elementos seguindo
a lógica LIFO (Last In, First Out), ou seja, o último elemento inserido é o primeiro a
ser retirado. Isso torna as pilhas úteis para diversas aplicações, como a verificação de
expressões matemáticas e a implementação de backtracking em algoritmos.
• Filas: São estruturas de dados que permitem o armazenamento de elementos seguindo
a lógica FIFO (First In, First Out), ou seja, o primeiro elemento inserido é o primeiro a
ser retirado. Isso as torna úteis para diversas aplicações, como o gerenciamento de
tarefas em um sistema operacional.
• Árvores Binárias: São estruturas de dados que permitem o armazenamento de
elementos emlivro
O conteúdo deste uma estrutura
eletrônico hierárquica,
é licenciado em por
para Foco - , vedada, que cada meios
quaisquer nó pode ter no
e a qualquer título,máximo dois
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 4 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
filhos. Essa estrutura é útil para diversas aplicações, como a representação de dados
em bancos de dados, a criação de árvores de decisão em algoritmos de inteligência
artificial, entre outros.
Bom, isso é apenas uma breve introdução sobre alguns dos principais tópicos que vamos
abordar nesta aula sobre Estrutura de Dados e Algoritmos.
As referências bibliográficas estarão presentes ao final da nossa aula.
Espero que você goste do que vamos estudar e do material desenvolvido. Não se esqueça
de deixar sua avaliação na plataforma, pois isso é extremamente valioso para nós.
Também estou sempre a disposição para responder possíveis dúvidas no fórum do aluno.
Então, vamos lá!
Prof. Esp. Sergio Sierro
@sergiosierro
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 5 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
1.1. INTRODUÇÃO
A estrutura de dados e algoritmos são fundamentais no desenvolvimento de sistemas
computacionais. A estrutura de dados é a organização lógica e física dos dados em um
sistema, enquanto os algoritmos são as sequências de passos lógicos que permitem
manipular esses dados para realizar uma tarefa específica.
A estrutura de dados inclui tipos de dados básicos, como inteiros, caracteres, booleanos,
entre outros, além de estruturas mais complexas, como arrays, listas, pilhas, filas, árvores,
grafos e hash tables. Cada estrutura é projetada para armazenar e manipular dados de
maneira eficiente, dependendo do tipo de dados e da tarefa que se deseja executar.
A estrutura de dados se preocupa com a organização e armazenamento de dados em
um sistema, fornecendo uma maneira de acessar e manipular esses dados. As estruturas
de dados podem ser classificadas em dois tipos principais: as estáticas e as dinâmicas.
As estruturas estáticas são aquelas cujo tamanho não pode ser alterado depois de
criadas, como matrizes e vetores. Por outro lado, as estruturas dinâmicas, como listas
encadeadas, filas e pilhas, permitem a adição e remoção de elementos sem a necessidade
de realocação de memória.
Por sua vez, os algoritmos são sequências de instruções lógicas que permitem a realização
de uma tarefa específica. Um algoritmo é composto por um conjunto de passos bem
definidos que, quando executados em sequência, produzem um resultado. Cada passo deve
ser preciso e não ambíguo, de modo que o resultado seja correto e previsível.
Os algoritmos podem ser classificados de acordo com a sua finalidade, como algoritmos
de busca, ordenação, criptografia, entre outros. Cada tipo de algoritmo possui um conjunto
de técnicas e estruturas de dados associadas que visam melhorar a eficiência e a velocidade
da solução.
Ao combinar as estruturas de dados com os algoritmos, é possível criar soluções
eficientes para uma ampla variedade de problemas. Por exemplo, a busca sequencial e a
busca binária são algoritmos utilizados para procurar um elemento em um conjunto de
dados. A escolha do algoritmo a ser utilizado pode depender do tamanho dos dados e da
necessidade de otimização do tempo de execução. Outro exemplo inclui algoritmos de
ordenação, como o bubblesort, o mergesort e o quicksort são utilizados para classificar
dados em uma lista de maneira eficiente.
As listas, pilhas e filas são outras estruturas de dados comuns que podem ser usadas
em conjunto com algoritmos para resolver problemas específicos. As listas, por exemplo,
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 6 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
são usadas para armazenar e gerenciar conjuntos de dados que precisam ser acessados
em sequência. As pilhas, por outro lado, são usadas para armazenar dados em uma ordem
específica, permitindo que o último item adicionado seja o primeiro a ser removido. Já as
filas são usadas para armazenar dados em ordem de chegada, permitindo que o primeiro
item adicionado seja o primeiro a ser removido.
Uma estrutura de dados eficiente permite o acesso e manipulação dos dados de forma
mais rápida e eficiente, enquanto um algoritmo bem projetado permite realizar tarefas
de forma mais rápida e precisa.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 7 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Cada tipo de dados tem suas próprias regras e operações para armazenamento e
manipulação.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 8 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/
Em um array, cada elemento pode ser acessado por um índice inteiro, que indica a
posição do elemento na coleção.
Uma matriz (ou array multi-dimensional) é um vetor de vetores. Por exemplo, precisamos
de uma matriz para armazenar as 4 notas de cada um dos 50 alunos. Ou seja, um vetor de
50 posições, e em
O conteúdo cada
deste posição
livro eletrônico do vetor,
é licenciado há outro
para Foco vetor
- , vedada, com 4
por quaisquer posições.
meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 9 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://dicasdeprogramacao.com.br/o-que-sao-vetores-e-matrizes-arrays/
Em uma matriz, cada elemento é identificado por um par de índices que indica a linha
e a coluna em que ele está localizado.
Tanto arrays quanto matrizes possuem um tamanho fixo, que é definido no momento
da sua criação. Isso significa que não é possível adicionar ou remover elementos depois que
a estrutura é criada. Para modificar um elemento em um array ou matriz, basta acessá-lo
pelo índice correspondente e atribuir um novo valor a ele.
1.6. LISTAS
As listas são estruturas de dados que permitem armazenar um conjunto de elementos
de forma organizada e dinâmica. Diferentemente do array, que tem tamanho fixo, as listas
são flexíveis e podem crescer ou encolher à medida que novos elementos são adicionados
ou removidos.
As listas podem ser implementadas de diversas maneiras, sendo as mais comuns as
listas encadeadas, listas duplamente encadeadas e listas circulares:
• Lista encadeada: É uma coleção de elementos, onde cada elemento é armazenado em
um nó, e conectado a um ou mais nós adjacentes por meio de ponteiros. O primeiro
nó da lista é chamado de cabeça (head) e o último é chamado de cauda (tail). Cada nó
contém dois campos, um campo para armazenar o valor do elemento e outro campo
para armazenar o ponteiro para o próximo nó da lista. O último nó da lista possui um
ponteiro nulo, indicando o fim da lista;
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 10 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://medium.com/aprendacpp/criando-uma-lista-encadeada-em-c-17e7f5692f36
Fonte: http://www.sergioportari.com.br/wp-content/uploads/2018/11/aula06b-Listas-circular-e-duplamente.pdf
• Lista circular: É uma lista encadeada onde o último nó da lista tem um ponteiro
que aponta para o primeiro nó, formando um círculo. Dessa forma, a lista pode ser
percorrida infinitamente, sem ter um fim definido.
Fonte: https://www.devmedia.com.br/linkedlists-o-que-acontece-por-tras-da-interface/24613
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 11 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Além desses tipos de listas, também existem as listas simplesmente encadeadas, que
são listas encadeadas que só permitem percorrer a lista em uma única direção, e as listas
duplamente encadeadas circulares, que são uma combinação das características das listas
duplamente encadeadas e circulares.
Em termos de operações, as listas permitem a inserção de um elemento no início, fim
ou em uma posição específica da lista, bem como a remoção de um elemento. Também é
possível percorrer a lista, acessar um elemento em uma posição específica ou verificar se
a lista está vazia.
As operações básicas em uma lista incluem:
• Inserção: adicionar um novo elemento à lista;
• Remoção: excluir um elemento existente da lista;
• Busca: encontrar a posição de um elemento na lista;
• Acesso: acessar o valor de um elemento em uma determinada posição na lista;
• Atualização: modificar o valor de um elemento existente na lista;
• Ordenação: rearranjar os elementos da lista em uma ordem específica.
1.7. FILAS
As filas são uma estrutura de dados linear que segue o princípio de “primeiro a entrar,
primeiro a sair” (FIFO – First In, First Out), ou seja, o primeiro elemento a ser inserido na fila
é o primeiro a ser removido. As operações básicas em uma fila são a inserção de elementos
no final da fila (enqueue) e a remoção do elemento no início da fila (dequeue). É possível
também acessar o elemento no início da fila sem removê-lo (peek ou front), verificar se a
fila está vazia (empty) e limpar todos os elementos da fila (clear).
Fonte: https://infoblogsi.wordpress.com/2014/10/05/aula-7-listas-filas-pilhas-e-arvores/
Existem três tipos principais de filas: fila comum (também conhecida como fila linear),
fila circular e fila com prioridade:
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 12 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
• Fila comum: É a estrutura de dados mais simples em que os elementos são adicionados
ao final da fila e removidos do início da fila, seguindo uma ordem de chegada. Essa
implementação é adequada quando a ordem dos elementos é importante e a
prioridade é igual para todos. A fila é conhecida como linear porque seus elementos
são organizados em uma linha reta, seguindo uma ordem específica. Ou seja, os
elementos são inseridos no final da fila e removidos do início da fila, mantendo
sempre uma ordem sequencial;
• Fila circular: É uma variação da fila comum em que os elementos são organizados em
um círculo. O último elemento da fila está conectado ao primeiro, formando um círculo;
• Fila com prioridade: é uma implementação em que cada elemento é associado a
uma prioridade e os elementos são organizados na fila de acordo com a ordem das
prioridades. Elementos com prioridades mais altas são removidos primeiro. Esse tipo
de fila é comum em aplicações em que a ordem de chegada não é tão importante
quanto a prioridade, como em um sistema de atendimento médico, em que pacientes
em estado crítico recebem atendimento prioritário em relação a pacientes com
condições menos graves.
Fonte: https://acervolima.com/vantagens-da-fila-circular-em-relacao-a-fila-linear/
1.8. PILHAS
As pilhas são estruturas de dados lineares que armazenam uma coleção de elementos,
onde a inserção e a remoção dos elementos ocorrem apenas em uma extremidade da pilha,
conhecida como o topo. A pilha segue a regra LIFO (Last In, First Out), ou seja, o último
elemento inserido na pilha é o primeiro a ser removido.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 13 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
As duas principais operações em uma pilha são push e pop. A operação push é utilizada
para inserir um elemento na pilha, colocando-o no topo da pilha. A operação pop é utilizada
para remover o elemento do topo da pilha. Também é possível realizar uma operação peek
ou top, que permite verificar o elemento no topo da pilha sem removê-lo.
Fonte: https://www.cos.ufrj.br/~rfarias/cos121/pilhas.html
1.9. ÁRVORES
Uma árvore é uma estrutura de dados não linear em que os elementos, chamados de
nós, são organizados em uma hierarquia ou em estrutura semelhante a uma árvore. A árvore
consiste em um nó raiz, que é o nó superior, e vários nós filhos, que são conectados ao nó
pai diretamente acima deles. Os nós que não possuem filhos são chamados de nós folha,
enquanto os nós com um ou mais filhos são chamados de nós internos. Além disso, os nós
que possuem o mesmo pai são chamados de irmãos.
Os nós em uma árvore são conectados por meio de arestas, que representam as conexões
entre os nós. Cada nó em uma árvore pode ter zero ou mais filhos, e cada filho pode ter
zero ou mais filhos. Uma árvore é dita ser uma árvore vazia se não tiver nenhum nó.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 14 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://rosbergguedes.medium.com/estruturas-de-dados-%C3%A1rvore-bc1a651e6533
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 15 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://blog.cod3r.com.br/estruturas-de-dados-arvores-binarias/
Observe que nas árvores binárias só existe um caminho a percorrer, indo do nó raiz
aos nós folha.
A altura de uma árvore é definida como o número máximo de nós no caminho mais longo
da raiz até uma folha da árvore. Ou seja, é o comprimento do caminho mais longo da raiz
até um nó folha. Uma árvore vazia tem altura zero e uma árvore com um único nó tem
altura um.
www.grancursosonline.com.br 16 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://www.ime.usp.br/~pf/algoritmos/aulas/binst.html
Uma propriedade importante das árvores binárias de busca é que os dados são
armazenados de forma ordenada, de modo que a busca pode ser realizada de forma
eficiente. Além da operação de busca, as árvores binárias de busca também suportam
as operações de inserção e remoção de elementos. Ao inserir um novo elemento, ele é
colocado na posição adequada na árvore de acordo com a ordem das chaves. Ao remover um
elemento, é necessário garantir que a propriedade de ordem da árvore ainda seja mantida.
Se o elemento a ser removido tiver filhos, é preciso escolher um dos filhos para ocupar a
sua posição, de forma a manter a propriedade de ordem.
Uma árvore binária balanceada (ou árvore AVL) é uma árvore binária na qual as alturas
das duas subárvores de todo nó nunca difere em mais de 1. O balanceamento de um nó é
definido como a altura de sua subárvore esquerda menos a altura de sua subárvore direita.
A altura Ode uma deste
conteúdo árvore bináriaé licenciado
livro eletrônico é o nível máximo
para de suas
Foco - , vedada, folhas
por quaisquer (profundidade).
meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 17 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://www.facom.ufu.br/~claudio/Cursos/Antigos/EDxxxx/Artigos/bcc-ed05.pdf
Analisando as quatro árvores da figura acima podemos notar que, para o nó que possui o
valor 14, a diferença da altura das subárvores da direita e da esquerda é igual a 0 na árvore
(a) e de 1 na árvore (b). Na árvore (a) também podemos dizer que a árvore é perfeitamente
balanceada, já que não há diferença entre as alturas das subárvores da direita e da esquerda.
Na árvore (c), para o nó que possui o valor 14, a altura da subárvore da esquerda é 4 e a altura
da subárvore da direita é 2. Portanto, a diferença é 2, assim, essa árvore não está balanceada.
O mesmo ocorre com a árvore (d) para o nó que possui valor 14, a subárvore da esquerda
tem altura 3 e a subárvore da direita tem altura 1, resultando em uma diferença de 2.
A estrutura de uma árvore AVL é semelhante a uma árvore binária de busca convencional,
com cada nó contendo uma chave e dois filhos (um filho esquerdo e um filho direito). A
diferença é que, após cada operação de inserção ou exclusão, a árvore é reequilibrada para
manter a altura balanceada.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 18 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://pt.wikipedia.org/wiki/%C3%81rvore_AVL
Agora observe essa mesma árvore, só que agora como uma árvore AVL:
Fonte: https://pt.wikipedia.org/wiki/%C3%81rvore_AVL
Existem quatro tipos de rotações que podem ser executadas em uma árvore AVL para
reequilibrá-la: rotação simples à esquerda, rotação simples à direita, rotação dupla à
esquerda e rotação dupla à direita. As rotações consistem em reorganizar a estrutura da
árvore, modificando as posições dos nós, para que a árvore seja equilibrada novamente.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 19 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Uma árvore B (B-Tree) é uma estrutura de dados balanceada usada para indexar bancos
de dados. É uma árvore m-way, o que significa que cada nó pode ter até m filhos. O número
de chaves em cada nó não folha deve ser um a menos que o número de filhos. As chaves
em cada nó são ordenadas de forma crescente, e para cada chave há dois endereços para
as páginas filhas.
A árvore B (B-Tree) é uma árvore binária que possui um conjunto de nós que armazenam
registros. Cada nó possui um número definido de chaves e ponteiros. As chaves são usadas
para classificar os registros armazenados nos nós e os ponteiros são usados para indicar
o nó pai e filhos de um nó.
Fonte: https://www.programiz.com/dsa/b-tree
Cada nó interno em uma árvore B (B-Tree) armazena uma lista ordenada de chaves que
são usadas para indexar os dados armazenados na árvore. Os nós internos não armazenam
os dados em si, mas apontam para os filhos que contêm os dados correspondentes. Os nós
folha, por outro lado, armazenam as chaves e os dados correspondentes.
Uma árvore B (B-Tree) de ordem m é uma estrutura de dados balanceada que é usada
para indexar bancos de dados. Cada nó pode ter até m filhos, desde que cada filho esteja
organizado no contexto de uma árvore de busca e todas as folhas estejam no mesmo nível.
O número de chaves em cada nó não folha deve ser um a menos que o número de filhos. A
altura da árvore é diretamente proporcional ao número de nós na árvore e é geralmente
representada como O(log(N)). As chaves em cada nó são ordenadas de forma crescente, e
para cada chave há dois endereços para as páginas filhas.
Uma árvore rubro-negra é uma árvore binária de busca autobalanceada que é
construída a partir de um conjunto de nós vermelhos e pretos. Esta estrutura de dados
é projetada para manter os elementos em ordem e para permitir que operações como
inserção, remoção e busca sejam executadas de forma eficiente.
Uma árvore rubro-negra é uma árvore de busca binária onde cada nó tem um atributo
de cor, vermelho ou preto. Além dos requisitos ordinários impostos pelas árvores de busca
binárias, as árvores rubro-negras têm os seguintes requisitos adicionais:
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 20 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://pt.wikipedia.org/wiki/%C3%81rvore_rubro-negra
1.10. GRAFOS
Um grafo é uma estrutura de dados usada para representar relações entre elementos
de um conjunto. Um grafo é composto de vértices (também chamados de nós) e arestas
(ou ligações) que conectam cada vértice a outro. Cada vértice representa um elemento do
conjunto e suas conexões representam a relação entre os elementos. Grafos são usados
para representar diversas estruturas de dados, como redes, árvores, fluxos de trabalho,
circuitos e muito mais. Eles são também usados para resolver problemas de programação
e problemas de otimização.
Conceitualmente, um grafo é composto por um conjunto discreto de elementos que
representam a existência de algo material ou imaginário. Estes elementos se relacionam. Os
elementos do conjunto discreto em questão são interconectados por relações de um padrão
de incidência bem definido, e estas relações fazem parte do grafo, elas são expressas por
arestas, Oenquanto oslivroelementos
conteúdo deste interconectados
eletrônico é licenciado são
para Foco - , vedada, porexpressos por
quaisquer meios vértices.
e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 21 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://medium.com/programadores-ajudando-programadores/os-grafos-e-os-algoritmos-697c1fd4a416
Fonte: https://medium.com/programadores-ajudando-programadores/os-grafos-e-os-algoritmos-697c1fd4a416
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 22 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Existe a necessidade de representar relações que não sejam mútuas, há duas categorias
de grafos: os não-direcionados e os direcionados.
Os grafos não-direcionados são aqueles cujas arestas não possuem direção. Essa falta
de direção indica que a relação representada pela aresta é simétrica, ou seja, se há uma
aresta que conecta o vértice A ao vértice B, há também uma aresta que conecta o vértice B
ao vértice A.
Os grafos direcionados (também chamados de dígrafos) são aqueles cujas arestas
possuem uma direção. Essa direção indica a direção da relação representada pela aresta.
Na representação gráfica do dígrafo, as arestas são representadas como setas que
indicam uma ou duas direções, ao invés de linhas.
Fonte: https://medium.com/programadores-ajudando-programadores/os-grafos-e-os-algoritmos-697c1fd4a416
Os grafos valorados, ou grafos ponderados, são aqueles em que cada aresta possui um
peso ou custo associado a ela. São usados para representar alguma característica escalar
do relacionamento entre seus vértices. Os pesos podem ser números inteiros ou reais.
Fonte: https://medium.com/programadores-ajudando-programadores/os-grafos-e-os-algoritmos-697c1fd4a416
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 23 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://medium.com/programadores-ajudando-programadores/os-grafos-e-os-algoritmos-697c1fd4a416
Um grafo é dito ser completo quando todos os seus possíveis pares de vértices estão
conectados por uma aresta. Isso significa que, para qualquer par de vértices, existe uma
aresta direta entre eles. O grafo completo é geralmente representado por um círculo, que
representa todos os vértices e arestas entre eles.
Fonte: https://medium.com/programadores-ajudando-programadores/os-grafos-e-os-algoritmos-697c1fd4a416
Os grafos são estruturas usadas para representar relações entre dados e pode ser usada
para encontrar soluções para problemas complexos, pois permite o fluxo de informações entre
diferentes componentes de um sistema. Grafos também são usados para visualizar redes
complexas, como redes sociais, transporte público, sistemas de computação distribuídos,
enzimas Oetc.
conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 24 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte:
O conteúdo deste livro eletrônico https://resumos.leic.pt/iaed/hash-tables/
é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 25 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
As colisões de hash ocorrem quando duas chaves diferentes são mapeadas para o
mesmo valor de índice em uma tabela de hash. Essa situação é inevitável em estruturas de
dados baseadas em hash, uma vez que é impossível mapear um número infinito de chaves
para um número finito de valores de índice.
Existem diversas técnicas para lidar com colisões de hash, incluindo:
• Encadeamento separado: Nessa técnica, cada posição da tabela de hash contém
uma lista ligada de valores associados a essa posição. Quando ocorre uma colisão, o
novo valor é adicionado à lista correspondente;
• Endereçamento aberto: Nessa técnica, quando ocorre uma colisão, uma sequência
de posições na tabela de hash é examinada em busca de uma posição vazia, onde
o novo valor pode ser armazenado. Existem diferentes maneiras de escolher a
sequência de posições, como o método linear, onde as posições são examinadas
uma a uma, ou o método quadrático, onde as posições são examinadas com base
em uma sequência quadrática;
• Hashing duplo: Nessa técnica, é usada uma segunda função de hash para gerar um
novo índice quando ocorre uma colisão. Essa função de hash pode ser projetada para
evitar colisões com a primeira função de hash.
www.grancursosonline.com.br 26 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
menor. A busca binária requer que a estrutura de dados seja ordenada, o que pode exigir
uma etapa adicional de ordenação. Além disso, a busca binária só é eficiente para estruturas
de dados estáticas, pois requer acesso aleatório aos elementos, o que não é possível em
estruturas de dados dinâmicas, como listas encadeadas.
A busca sequencial é um algoritmo simples e eficiente que pode ser usado em estruturas
de dados pequenas, não ordenadas, para encontrar valores específicos em posições
específicas ou em estruturas de dados dinâmicas.
A busca binária é um algoritmo de busca eficiente usado em estruturas de dados
grandes e ordenadas, como arrays, listas, árvores binárias de busca e outras estruturas
que permitem acesso aleatório aos elementos. Ao dividir a estrutura de dados pela metade
a cada iteração, a busca binária reduz o número de elementos a serem examinados em
cada etapa, tornando a busca mais rápida. É adequada para conjuntos de dados estáticos
e pode ser usada para encontrar elementos específicos, como o elemento de maior ou
menor valor ou o elemento na posição k.
Observe um exemplo de busca sequencial:
Fonte: https://pt.slideshare.net/leinylson/pesquisa-e-ordenao-aula-12-pesquisa-de-dados-sequencial-e-binria
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 27 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://pt.slideshare.net/leinylson/pesquisa-e-ordenao-aula-12-pesquisa-de-dados-sequencial-e-binria
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 28 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://technologystrive.com/bubble-sort/
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 29 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://runestone.academy/ns/books/published/pythonds/SortSearch/TheInsertionSort.html
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 30 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://technologystrive.com/selection-sort/
www.grancursosonline.com.br 31 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
adicional para armazenar as sublistas, o que pode ser um problema para conjuntos de
dados muito grandes.
Fonte: https://www.dotnetlovers.com/article/128/implementation-and-analysis-of-merge-sort
www.grancursosonline.com.br 32 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Fonte: https://trabalhosparaescola.com.br/visao-geral-do-quicksort/
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 33 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
RESUMO
Nessa aula, você deve fixar os seguintes pontos:
1) As estruturas de dados são formas de organizar e armazenar dados na memória
do computador para facilitar o acesso e manipulação desses dados. Os algoritmos são
sequências de instruções bem definidas e organizadas para executar uma tarefa específica,
como ordenar uma lista ou buscar um elemento em uma estrutura de dados;
2) Existem diversas estruturas de dados, como listas, pilhas, filas, árvores, grafos,
tabelas de hash, entre outras;
3) Existem diversos algoritmos para realizar diferentes tarefas, como ordenação, busca,
processamento de dados, entre outros;
4) Filas, pilhas e listas são estruturas de dados lineares que armazenam elementos em
uma ordem específica;
5) Uma fila é uma estrutura de dados onde o primeiro elemento a ser adicionado é o
primeiro a ser removido (FIFO - First In, First Out). As operações mais comuns em uma
fila são a inserção de um elemento no final e a remoção de um elemento no início. As filas
podem ser implementadas usando arrays ou listas encadeadas;
6) Uma pilha é uma estrutura de dados onde o último elemento a ser adicionado é o
primeiro a ser removido (LIFO - Last In, First Out). As operações mais comuns em uma pilha
são a inserção de um elemento no topo da pilha e a remoção de um elemento do topo da
pilha. As pilhas também podem ser implementadas usando arrays ou listas encadeadas;
7) As listas são estruturas de dados que permitem a inserção e remoção de elementos
em qualquer posição da lista. As operações mais comuns em uma lista são a inserção de um
elemento em uma posição específica, a remoção de um elemento de uma posição específica
e a busca por um elemento específico na lista. As listas podem ser implementadas usando
listas encadeadas ou arrays;
8) Árvores e grafos são estruturas de dados não lineares;
9) As árvores são estruturas hierárquicas que consistem em nós conectados por arestas.
Cada nó possui um valor e zero ou mais filhos, que são outros nós que estão imediatamente
abaixo dele na hierarquia. Existem muitos tipos de árvores, como árvores binárias, árvores
de busca binária, árvores AVL e árvores B, entre outras;
10) Os grafos são estruturas de dados que permitem representar relacionamentos
entre objetos. Eles consistem em um conjunto de vértices (também chamados de nós) e
um conjunto de arestas que conectam esses vértices. Os grafos podem ser direcionados
ou não-direcionados, ponderados ou não-ponderados, e podem ter ciclos ou não. Existem
muitos algoritmos e técnicas para manipular grafos, como busca em largura, busca em
profundidade e algoritmos de caminho mínimo;
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 34 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
11) As tabelas de hash, ou hash tables, são estruturas de dados que permitem mapear
chaves para valores de maneira eficiente. Elas consistem em uma matriz de elementos, onde
cada elemento é uma lista encadeada de pares chave-valor. A chave é passada por uma
função de hash para gerar um índice na matriz, onde o par chave-valor correspondente é
armazenado. As tabelas de hash são usadas para implementar mapas, conjuntos e outras
estruturas de dados;
12) A busca sequencial e a busca binária são algoritmos de busca que buscam por um
elemento em uma estrutura de dados. A busca sequencial percorre a estrutura de dados do
início ao fim, comparando cada elemento com o elemento procurado, até encontrá-lo ou
chegar ao fim da estrutura. A busca binária, por outro lado, só é aplicável em estruturas de
dados ordenadas e aproveita essa ordem para reduzir o número de comparações necessárias.
O algoritmo divide a estrutura de dados pela metade a cada iteração e verifica se o elemento
procurado está na primeira ou segunda metade, eliminando a outra metade da busca.
A busca binária é mais rápida que a busca sequencial em estruturas de dados grandes e
ordenadas, mas é menos eficiente em estruturas de dados não ordenadas ou dinâmicas;
13) Os algoritmos de ordenação são utilizados para organizar dados em uma determinada
ordem, de acordo com algum critério. Os principais algoritmos de ordenação:
• Bubble Sort: É um algoritmo simples que percorre o vetor diversas vezes, comparando
cada elemento com o próximo e trocando-os se estiverem fora de ordem. Possui
baixo desempenho em grandes conjuntos de dados;
• Insertion Sort: É um algoritmo que percorre o vetor e, a cada elemento, o insere em
sua posição correta, em relação aos elementos anteriores. É eficiente para pequenos
conjuntos de dados;
• Selection Sort: É um algoritmo que percorre o vetor diversas vezes, buscando o menor
elemento e o colocando na primeira posição, repetindo esse processo para cada
elemento subsequente. Possui baixo desempenho em grandes conjuntos de dados;
• Merge Sort: É um algoritmo que divide o vetor em subconjuntos menores e ordenados,
para depois mesclá-los em um único vetor ordenado. É eficiente para grandes conjuntos
de dados;
• Quick Sort: É um algoritmo que escolhe um elemento como pivô e separa o vetor em
duas partições, uma com elementos menores e outra com elementos maiores que
o pivô. Esse processo é repetido recursivamente para cada partição, até que todo o
vetor esteja ordenado. É eficiente para grandes conjuntos de dados.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 35 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
QUESTÕES DE CONCURSO
www.grancursosonline.com.br 36 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
I – São balanceadas.
II – Os nós podem ter mais de dois filhos.
III – A altura da árvore é O(lg(N)).
Está correto o que se afirma em
a) I, apenas.
b) I e II, apenas.
c) I e III, apenas.
d) II e III, apenas.
e) I, II e III.
www.grancursosonline.com.br 37 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 38 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 39 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) Uma árvore é considerada balanceada se, e somente se, para qualquer nó, a altura de
suas duas subárvores difere de no máximo uma unidade. Exemplos de árvores balanceadas
são as árvores AVL.
b) Uma árvore é considerada desbalanceada se, e somente se, para qualquer nó, a altura de
suas duas subárvores difere de, no máximo, uma unidade. Exemplos de árvores balanceadas
são as árvores AVL.
c) Uma árvore é considerada degenerada se, e somente se, para qualquer nó, a altura de
suas duas subárvores difere de, no máximo, uma unidade. Exemplos de árvores balanceadas
são as árvores AVL.
d) Uma árvore AVL é uma árvore na qual as alturas das subárvores esquerda e direita de
cada nó diferem no mínimo por uma unidade.
e) Na inserção em uma árvore AVL utiliza-se um processo de balanceamento que pode ser
de 2 tipos gerais: Rotação simples ou Rotação complexa.
www.grancursosonline.com.br 40 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) lista
b) fila
c) pilha
d) árvore
e) lista encadeada
www.grancursosonline.com.br 41 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 42 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 43 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 44 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 45 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) 20, 21, 13, 32, 44, 51, 38, 47, 49, 80, 53, 52, 97
b) 51, 32, 44, 47, 49, 38, 13, 21, 20, 80, 53, 52, 97
c) 51, 32, 13, 21, 20, 44, 38, 47, 49, 80, 53, 52, 97
d) D 97, 80, 53, 52, 51, 32, 44, 38, 47, 49, 13, 21, 20
e) 21, 20, 13, 38, 44, 47, 49, 32, 53, 52, 80, 97, 51
www.grancursosonline.com.br 46 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) selection sort.
b) bubble sort.
c) inserction sort.
d) quick sort.
e) merge sort.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 47 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 48 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
GABARITO
1. E 37. c
2. E 38. c
3. C 39. b
4. E 40. c
5. E 41. c
6. E 42. e
7. e 43. c
8. d 44. e
9. e 45. C
10. b 46. d
11. b 47. E
12. c 48. d
13. a 49. b
14. d 50. c
15. E
16. C
17. c
18. E
19. a
20. e
21. b
22. d
23. C
24. d
25. b
26. b
27. e
28. c
29. b
30. a
31. b
32. a
33. a
34. b
35. d
36. e
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 49 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
GABARITO COMENTADO
A descrição menciona uma política de “último a entrar, primeiro a sair”, que é a política de
uma fila, e não de uma lista.
Em uma lista, não há necessariamente uma ordem específica de remoção dos elementos.
Pode-se remover um elemento qualquer, desde o início até o final da lista.
Já em uma fila, os elementos são removidos em ordem estrita de chegada, ou seja, o
primeiro elemento inserido é o primeiro a ser removido.
Errado.
O conceito descrito pelo item diz respeito ao bubble sort, que é considerado o algoritmo
de ordenação mais simples. A ordenação descrita no item está em ordem decrescente, mas
ela também pode ser feita em ordem crescente.
O merge sort é um algoritmo de divisão e conquista. Ele divide o vetor em vetores menores
e faz a classificação de cada um dos subvetores. Depois, ele vai mesclando os arrays até
formar um novo array ordenado.
Errado.
www.grancursosonline.com.br 50 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Uma estrutura de dados do tipo fila é uma estrutura em que os elementos são inseridos
no fim e removidos no início. Pense em uma fila de banco. No nosso exemplo não existe
fila preferencial.
Vamos supor que Maria tenha chagado ao banco às 10h15min e pegou a senha 3. Joaquim
chega ao banco às 10h45min e pega a senha 8, Maria já está no banco faz 30 minutos.
Pergunta: quem sairá primeiro do banco Maria ou Joaquim? Certamente que Maria saíra
primeiro, pois ela está mais tempo na fila.
Se formos levar isso para um termo mais técnico teremos que o primeiro elemento a entrar
é o primeiro elemento a sair, FIFO.
Certo.
Uma pilha é uma estrutura de dados em que podemos ter seus elementos ordenados ou
não. Caso a pilha esteja ordenada o mais indicado é uma pesquisa binária, pois este tipo
de busca é utilizado em estruturas ordenadas.
Caso a pilha esteja desordenada, que acontece na maior parte das vezes, o mais indicado
é uma busca sequencial, que é mais indicada para estruturas não ordenadas.
Errado.
Uma árvore binária é uma estrutura de dados que possui um conjunto finito de elementos
que pode ou estar vazia ou possuir três subconjuntos distintos: raiz, subárvore direita e
subárvore esquerda.
Cada um dos elementos de uma árvore binária pode ser chamado de nó, portanto, o item é
incorreto, pois é possível termos árvores binárias vazias, com nenhum elemento, logo não
há exigência de termos, no mínimo, três nós.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 51 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Uma árvore binária leva este nome pois pode ter, no máximo, dois filhos para cada nó.
Errado.
Nas filas, são executadas as operações FIFO (First in, First Out). A estrutura que utiliza o
Last in, Fisrt out é uma pilha.
Na fila, O elemento inserido por primeiro é o primeiro elemento a sair da lista.
Errado.
A afirmativa I está CORRETA. As árvores B são balanceadas, o que significa que todas as
folhas estão na mesma altura.
A afirmativa II está CORRETA. É possível ter mais que dois filhos em uma Árvore B de ordem
m, desde que cada filho seja organizado no contexto de uma árvore de busca e todas as
folhas estejam no mesmo nível.
A afirmativa III está CORRETA. A altura da árvore B é diretamente proporcional ao número
de nós na árvore, e é geralmente representada como O(log(N)).
Letra e.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 52 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) Errada. As filas usam a lógica FIFO, que significa First In, First Out, ou seja, o primeiro
elemento a entrar é o primeiro a sair.
b) Errada. As operações básicas em uma fila são a inserção de elementos no final da fila
(enqueue) e a remoção do elemento no início da fila (dequeue). É possível também acessar
o elemento no início da fila sem removê-lo (peek ou front), verificar se a fila está vazia
(empty) e limpar todos os elementos da fila (clear)
c) Errada. A opção enqueue é uma operação básica em uma fila.
d) Certa. As pilhas usam a lógica LIFO, um acrônimo para Last In, First Out, ou seja, o último
elemento a entrar é o primeiro a sair.
e) Errada. Em uma linked list (lista ligada), há um ponteiro head, que aponta para o primeiro
elemento da lista.
Letra d.
www.grancursosonline.com.br 53 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
c) 4,12,10,18,22,24,15,31,44,35,66,90,70,50,25
d) 4,12,18,24,31,44,66,90,10,22,35,70,15,50,25
e) 25,15,10,4,12,22,18,24,50,35,31,44,70,66,90
A pre-order de uma árvore binária é uma maneira de percorrer a árvore. Neste método, o
nó raiz é visitado primeiro, seguido pelo nó esquerdo, e então pelo nó direito. Isso continua
até que todos os nós da árvore sejam visitados. A pre-order é útil para imprimir todos os
elementos da árvore em sua ordem correta.
Letra e.
www.grancursosonline.com.br 54 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) Errada. Operações que utilizam recursão podem ser realizadas sobre árvores binárias,
pois a recursão é usada para navegar através da árvore binária.
b) Certa. Uma árvore binária pode ser vazia, ou seja, o conjunto de elementos está vazio. É
uma característica de árvores binárias. As outras alternativas não estão corretas.
c) Errada. Uma árvore estritamente binária com n folhas tem 2n + 1 nós, pois cada nó em
uma árvore binária tem, no máximo, dois filhos.
d) Errada. Uma árvore binária completa possui, no mínimo, oito nós, pois existem vários
tipos de árvores binárias, com diferentes números mínimos de nós.
e) Errada. A altura de um nó é o comprimento do maior caminho do nó até o seu primeiro
descendente, pois a altura de um nó é a distância entre o nó e a raiz da árvore.
Letra b.
O nó raiz é uma referência para todos os outros nós da árvore, e é geralmente marcado
como o nó 0. A partir do nó raiz, os outros nós são chamados de nós filhos. Os nós que não
possuem filhos são chamados de nós folha.
Letra c.
www.grancursosonline.com.br 55 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) 1BC - 2AD
b) 1AD - 2BC
c) 1BD - 2AC
d) 1AC - 2BD
A pilha é uma estrutura de dados Last In, FirstOut (LIFO), ou seja, o elemento inserido por
último é o primeiro elemento a sair da lista. Por isso, a opção B foi escolhida. Além disso,
precisa de apenas um ponteiro para acessar a pilha, que representa o topo da pilha, portanto
a opção D está relacionada também a pilha.
A fila é uma estrutura de dados First In, First Out (FIFO), ou seja, o elemento inserido por
primeiro é o primeiro elemento a sair da lista. Por isso, a opção A foi escolhida. Além disso,
precisa-se de dois ponteiros para acessar a lista, um ponteiro para o início da lista e um
ponteiro para o final da lista, portanto a opção D está relacionada também a fila.
Letra a.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 56 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Quando dois dados originais geram o mesmo resumo, tem-se uma colisão de hash. O
objetivo principal dos projetistas de função hash é reduzir ao máximo a probabilidade de
ocorrência das colisões. A ferramenta mais usada para reduzir essa probabilidade é o ajuste
da distribuição dos resumos. Quanto mais uniforme e dispersa é a função resumo, menor
é a sua probabilidade de colisão.
Errado.
Uma função de hash é uma função matemática que aceita um valor de entrada de tamanho
arbitrário e o converte em um valor de saída de tamanho fixo. Essa função é usada para
calcular o índice de um elemento na tabela de dispersão. Além disso, as funções de hash são
usadas para ajudar a gerar índices únicos para cada entrada, garantindo que cada entrada
possa ser recuperada de forma rápida.
Certo.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 57 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) Errada. Qualquer árvore binária de busca de nós não necessariamente será balanceada. Uma
árvore binária de busca é uma estrutura de dados que mantém os elementos em uma ordem
lógica para permitir que sejam encontrados de forma rápida, mas nem sempre é balanceada.
b) Errada. Na lista duplamente encadeada de nós, cada nó possui duas ligações, não apenas
uma para a cabeça da lista.
c) Certa. A lista duplamente encadeada é uma estrutura de dados usada para armazenar
elementos de forma ordenada. Ela é representada por um conjunto de nós, onde cada nó
possui duas ligações: uma para o nó anterior e outra para o próximo nó. Essa estrutura de
dados é útil para operações de inserção e remoção de elementos, pois é mais fácil percorrer
a lista e localizar o elemento desejado.
d) Errada. Uma árvore binária não é necessariamente uma árvore binária de busca. Uma
árvore binária é uma estrutura de dados hierarquicamente organizada que pode ser usada
para representar e armazenar dados de maneira eficiente. Uma árvore binária de busca
possui características adicionais, como o fato de que os elementos são armazenados em
ordem lógica, o que permite que sejam facilmente localizados.
Letra c.
Essa afirmação é falsa, pois a complexidade de tempo do algoritmo bubble sort é O(n²). O
algoritmo bubble sort é um dos algoritmos de ordenação mais simples, mas também é o
mais lento. O tempo de execução aumenta quadraticamente com o tamanho do conjunto
de dados a ser ordenado.
Errado.
www.grancursosonline.com.br 58 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
c) Uma árvore é considerada degenerada se, e somente se, para qualquer nó, a altura de
suas duas subárvores difere de, no máximo, uma unidade. Exemplos de árvores balanceadas
são as árvores AVL.
d) Uma árvore AVL é uma árvore na qual as alturas das subárvores esquerda e direita de
cada nó diferem no mínimo por uma unidade.
e) Na inserção em uma árvore AVL utiliza-se um processo de balanceamento que pode ser
de 2 tipos gerais: Rotação simples ou Rotação complexa.
a) Certa. Uma árvore é considerada balanceada quando a altura de suas duas subárvores
difere de, no máximo, uma unidade. Exemplos de árvores balanceadas são as árvores AVL,
que são árvores binárias de busca autobalanceadas. Estas árvores possuem a propriedade
de balanceamento, o que significa que a altura de suas duas subárvores difere de, no
máximo, uma unidade.
b) Errada. Uma árvore desbalanceada é aquela em que a altura das subárvores difere em
mais do que uma unidade. Árvores AVL são exemplos de árvores balanceadas, pois a altura
de suas subárvores difere no máximo em uma unidade.
c) Errada. Uma árvore degenerada é aquela em que cada nó tem apenas um filho, o que a
torna uma estrutura linear em vez de uma estrutura hierárquica. A altura de cada subárvore
é zero ou um, o que faz com que a altura total da árvore seja igual ao número de nós menos
um. Por outro lado, uma árvore balanceada é uma árvore em que as subárvores de cada nó
têm alturas que diferem em no máximo uma unidade, e exemplos de árvores balanceadas
incluem as árvores AVL, árvores rubro-negras e árvores B.
d) Errada. Uma árvore AVL é uma árvore binária de busca balanceada na qual as alturas das
subárvores esquerda e direita de cada nó diferem no máximo por uma unidade.
e) Errada. Na inserção em uma árvore AVL, utiliza-se um processo de balanceamento que
pode ser realizado por meio de rotações simples ou rotações duplas.
Letra a.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 59 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Enfileirar (enqueue) é o processo de adicionar um elemento ao final de uma fila. Uma fila
é uma estrutura de dados baseada na ideia de primeiro a entrar, primeiro a sair (First In,
First Out – FIFO). Quando um elemento é enfileirado, ele é adicionado à parte traseira da
fila, portanto, será o último a sair. Isso garante que a ordem de inserção dos elementos
seja preservada.
Enfileirar é um processo simples e é usado principalmente para organizar as operações em
uma fila. Por exemplo, em um sistema de processamento de pedidos, novos pedidos podem
ser enfileirados para que sejam processados na ordem em que foram recebidos.
Letra e.
www.grancursosonline.com.br 60 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Uma árvore é uma estrutura de dados hierárquica, que consiste em nós ligados por arestas.
Cada nó pode ter vários filhos, mas apenas um nó pai. O nó raiz é o nó que não tem nenhum
nó pai. Uma árvore é utilizada para armazenar dados de forma eficiente e organizada. Cada
nó contém um valor, que pode ser uma palavra, um número ou outro tipo de dado. As árvores
são usadas para armazenar e recuperar dados de forma rápida, pois as operações de busca,
inserção e remoção podem ser realizadas em tempo constante. As árvores também são
utilizadas na programação, especialmente para implementar árvores de decisão e árvores
de pesquisa.
Letra d.
Uma árvore binária é uma estrutura de dados em que cada nó contém no máximo dois filhos,
conhecidos como nós esquerdo e direito. As árvores binárias são usadas para armazenar
e recuperar dados. O nó raiz é o nó original no topo da árvore, que está ligado a todos os
outros nós.
Uma árvore binária é criada usando a propriedade de ordenação, onde todos os nós à
esquerda do nó raiz são menores que ele e todos os nós à direita desse nó são maiores
que ele. Essa propriedade é importante para a árvore binária para garantir que os dados
possam ser facilmente armazenados e recuperados usando busca binária. Na busca binária,
o nó raiz é usado como o nó de referência. O valor armazenado no nó raiz é comparado ao
valor que está sendo procurado. Se o valor for maior que o valor armazenado no nó raiz,
então a busca é direcionada para a subárvore direita. Se o valor for menor, então a busca
é direcionada para a subárvore esquerda.
Essa propriedade também garante que, ao percorrer a árvore binária, os valores armazenados
nos nós sejam devolvidos em ordem crescente. Dessa forma, é possível realizar operações
de ordenação de dados eficientes.
Certo.
www.grancursosonline.com.br 61 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) lista - vetor
b) pilha - fila
c) vetor - lista
d) fila - pilha
Uma fila é uma estrutura de dados baseada na ideia de “primeiro a entrar, primeiro a
sair” (FIFO). É usado para armazenar dados de forma sequencial. Quando um elemento
é adicionado à fila, é colocado no final da fila. Quando um elemento é removido da fila, é
removido do início da fila.
Uma pilha é uma estrutura de dados baseada na ideia de “último a entrar, primeiro a
sair” (LILO). É usado para armazenar dados de forma sequencial. Quando um elemento é
adicionado à pilha, é colocado no topo da pilha. Quando um elemento é removido da pilha,
é removido do topo da pilha.
Letra d.
A afirmativa I está CERTA. A busca sequencial é sempre maior do que a busca binária, pois
a linear tem complexidade O(n) e a binária tem a complexidade O(log n). De fato, o que faz
toda a diferença é que na binária temos a ordenação.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 62 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
A afirmativa II está ERRADA. Funções hash são usadas para mapear grandes conteúdos de
informações e retornar resultados de pequeno porte e de tamanho fixo, mas elas não são
probabilísticas, ou seja, não retornam sempre o mesmo resultado para a mesma entrada.
As funções hash são criptograficamente seguras, ou seja, não é possível prever o resultado
dado o dado de entrada.
A afirmativa III está ERRADA. Uma árvore AVL é uma árvore na qual as alturas das subárvores
esquerda e direita de cada nó diferem no máximo por uma unidade.
Letra b.
A afirmativa I está CERTA. A busca sequencial é sempre maior do que a busca binária, pois
a linear tem complexidade O(n) e a binária tem a complexidade O(log n). De fato, o que faz
toda a diferença é que na binária temos a ordenação.
A afirmativa II está ERRADA. Funções hash são usadas para mapear grandes conteúdos de
informações e retornar resultados de pequeno porte e de tamanho fixo, mas elas não são
probabilísticas, ou seja, não retornam sempre o mesmo resultado para a mesma entrada.
As funções hash são criptograficamente seguras, ou seja, não é possível prever o resultado
dado o dado de entrada.
A afirmativa III está ERRADA. Uma árvore AVL é uma árvore na qual as alturas das subárvores
esquerda e direita de cada nó diferem no máximo por uma unidade.
Letra b.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 63 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
As listas duplamente encadeadas são aquelas que possuem o conteúdo de dois ponteiros,
um apontando para o elemento anterior e outro para o seguinte.
A questão também afirma que essa lista encadeada possui o seguinte esquema:
(<id>, <id do anterior>, <id do seguinte>, <conteúdo>)
Dessa forma, podemos observar o conjunto armazenado na lista encadeada:
(1, 3, 0, “Verde”) // Esse elemento representa o final de nossa lista, já que o elemento
seguinte é o zero.
(2, 4, 3, “Azul”) // Esse elemento está posicionado entre os elementos 4 (Vermelho) e
3 (Amarelo).
(3, 2, 1, “Amarelo”) // Esse elemento está posicionado entre os elementos 2 (Azul) e 1 (Verde).
(4, 0, 2, “Vermelho”) // Esse elemento representa o início da nossa sequência, já que o
elemento anterior é o zero.
Com isso, a nossa sequência encadeada fica:
Vermelho, Azul, Amarelo, Verde.
Letra e.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 64 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Com relação às buscas em vetores elas podem ser feitas de duas formas: sequencial, ou
linear, e binária.
Quando temos um vetor que não está ordenado a melhor pedida é fazer uma busca em cada
um dos elementos presentes nesse array até que seja encontrada uma correspondência
válida. Ao fazer buscas em um vetor que não está ordenado, estamos diante da busca
sequencial. Porém, quando o vetor está ordenado não faz sentido utilizar o método de
busca sequencial. Nesse caso, é melhor utilizar a busca binária.
Sobre o item I, como estamos fazendo busca em um array ordenado, será utilizada a
busca binária.
Sobre o item II, como temos uma lista desordenada, ou seja, um array desordenado, será
utilizada a busca sequencial.
Sobre o item III, se um vetor está ordenado, seja de forma crescente ou decrescente, o
método de busca mais indicado é a busca binária.
Letra c.
www.grancursosonline.com.br 65 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Filas são estruturas de dados bastante utilizadas na computação, onde o primeiro elemento
a ser inserido, será também o primeiro a ser retirado (FIFO). Desta forma, os elementos
serão inseridos no fim e removidos pelo início.
Letra b.
As pilhas são estruturas de dados do tipo LIFO (Last In, First Out), onde o último elemento
a ser inserido, será o primeiro a ser retirado. Assim, uma pilha permite acesso a apenas
um item de dados, o último inserido. Para processar o penúltimo item inserido, deve-se
remover o último.
Letra a.
www.grancursosonline.com.br 66 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Um grafo é uma estrutura de dados que consiste em um conjunto de nós, que são conectados
por arestas. Os nós representam entidades, como pessoas, locais ou objetos, e as arestas
representam relações entre essas entidades. Os grafos podem ser usados para modelar
diversos tipos de problemas em diferentes domínios, como redes sociais, grafos de redes
de computadores, grafos de fluxo de trabalho etc.
Letra b.
A árvore AVL é uma árvore binária de busca balanceada que é projetada para manter a
altura balanceada em cada nó, garantindo que a diferença entre as alturas da subárvore
esquerda e da subárvore direita de cada nó seja de no máximo um. Isso significa que, para
qualquer nó da árvore AVL, as alturas de suas duas subárvores (esquerda e direita) diferem
de no máximo uma unidade.
Essa característica de balanceamento é fundamental para garantir que as operações de
inserção, exclusão e busca na árvore AVL tenham um tempo de execução mais eficiente e
estável, tornando-a uma estrutura de dados muito útil em diversas aplicações em que é
importante manter uma estrutura de dados escalável e eficiente.
Letra a.
www.grancursosonline.com.br 67 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
inserir no início da lista; inserir no fim; consultar toda a lista; remover um elemento qualquer
dela; e esvaziá-la.
a) lista simplesmente encadeada e não ordenada.
b) lista simplesmente encadeada e ordenada.
c) lista duplamente encadeada e não ordenada.
d) lista duplamente encadeada e não ordenada.
e) lista triplamente encadeada.
Uma lista simplesmente encadeada é uma estrutura de dados em que cada elemento
armazena um ou vários dados e um ponteiro para o próximo elemento, permitindo o
encadeamento e mantendo a estrutura linear.
Essa estrutura permite a inserção e remoção de elementos de forma dinâmica, sem a
necessidade de realocar a memória, o que é útil em casos em que o tamanho da lista pode
variar ao longo do tempo. Além disso, a lista pode ser percorrida sequencialmente para
consultar ou processar seus elementos.
No entanto, como os elementos da lista não são organizados de forma ordenada, a busca
de um elemento específico pode exigir a varredura de toda a lista, o que pode tornar o
processo de busca ineficiente em listas muito grandes.
Letra a.
www.grancursosonline.com.br 68 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Como cada página pode ter no máximo 4 filhas e ali já há 4 elementos, ocorre um overflow
e, assim, é necessário realizar um split para manter o balanceamento da árvore. Para isso,
pega-se o valor da mediana que, no caso, é o elemento 10 e suba ele para o nó raiz:
Letra b.
www.grancursosonline.com.br 69 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 70 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
O algoritmo de ordenação por inserção requer uma quantidade constante de O(1) espaço
de memória adicional, pois a ordenação é feita “in-place”, ou seja, sem a necessidade de
criar uma nova estrutura de dados para armazenar os elementos ordenados. As outras
opções requerem, em algum momento do algoritmo, espaço adicional para armazenar os
elementos ordenados ou para auxiliar nas operações de ordenação.
Letra c.
a) 20, 21, 13, 32, 44, 51, 38, 47, 49, 80, 53, 52, 97
b) 51, 32, 44, 47, 49, 38, 13, 21, 20, 80, 53, 52, 97
c) 51, 32, 13, 21, 20, 44, 38, 47, 49, 80, 53, 52, 97
d) D 97, 80, 53, 52, 51, 32, 44, 38, 47, 49, 13, 21, 20
e) 21, 20, 13, 38, 44, 47, 49, 32, 53, 52, 80, 97, 51
www.grancursosonline.com.br 71 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Uma pilha é uma estrutura de dados onde o último elemento a ser adicionado é o primeiro
a ser removido (LIFO - Last In, First Out). As operações mais comuns em uma pilha são a
inserção de um elemento no topo da pilha e a remoção de um elemento do topo da pilha.
As pilhas também podem ser implementadas usando arrays ou listas encadeadas.
Letra b.
Uma lista encadeada é uma estrutura de dados que armazena uma sequência de elementos,
cada um contendo um valor e um ponteiro para o próximo elemento na lista. Ao contrário
de um array, os elementos de uma lista encadeada podem ser alocados em posições de
memória não contíguas. Isso permite que elementos sejam adicionados ou removidos da
lista com eficiência, sem a necessidade de realocação de memória. As listas encadeadas são
frequentemente usadas em algoritmos que requerem inserções ou remoções frequentes
de elementos, ou em situações em que o tamanho da estrutura de dados é desconhecido
ou pode variar.
Letra c.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 72 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
O método descrito é o algoritmo de ordenação por inserção (insertion sort). Ele percorre
o vetor de elementos da esquerda para a direita, inserindo cada elemento em sua posição
correta na parte ordenada do vetor. Ele é eficiente para pequenas quantidades de elementos,
mas pode ser ineficiente para grandes quantidades de elementos, pois requer tempo
proporcional ao quadrado do número de elementos para ordená-los.
Letra c.
O merge sort, ou ordenação por mistura, é um algoritmo de ordenação que usa a estratégia
dividir-para-conquistar. O merge sort divide a sequência em subsequências menores, ordena
cada subsequência recursivamente e, em seguida, combina as subsequências em uma
única sequência ordenada. Esse algoritmo possui uma complexidade de tempo de O(n log
n) e é eficiente para ordenar grandes quantidades de dados. Já o bubble sort possui uma
complexidade de tempo de O(n²) e é menos eficiente para grandes quantidades de dados.
Letra e.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 73 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
www.grancursosonline.com.br 74 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
Uma árvore é uma estrutura de dados hierárquica em que cada nó (exceto o nó raiz) está
ligado a apenas um nó pai e pode ter vários nós filhos. Os nós filhos, por sua vez, podem
ter outros nós filhos, formando assim uma hierarquia ou árvore. Essa estrutura é muito
utilizada em algoritmos de busca e ordenação, bem como em outras aplicações, como
estruturas de diretórios em sistemas operacionais.
Certo.
Uma estrutura de dados do tipo pilha (stack) é caracterizada pelas seguintes operações:
Push: adiciona um novo elemento no topo da pilha;
Pop: remove o elemento do topo da pilha;
Top (ou Peek): retorna o elemento no topo da pilha sem removê-lo;
Size: retorna a quantidade de elementos na pilha;
IsEmpty: verifica se a pilha está vazia.
A pilha segue o princípio LIFO (Last In, First Out), ou seja, o último elemento adicionado é o
primeiro a ser removido. Essa estrutura é comumente utilizada em algoritmos que precisam
realizar operações em ordem inversa à ordem em que foram realizadas.
Letra d.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 75 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
O algoritmo de ordenação por seleção (selection sort) requer espaço adicional para a troca
dos elementos, e este espaço é proporcional ao número de elementos sendo ordenados, ou
seja, não é uma quantidade constante. Além disso, o algoritmo não é eficiente para ordenar
grandes conjuntos de dados, pois possui complexidade de tempo O(n²), onde n é o número
de elementos a serem ordenados.
Errado.
www.grancursosonline.com.br 76 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
a) Errada. Pilhas são estruturas de dados do tipo LIFO (Last In, First Out) que armazenam
os dados de forma linear. Árvores binárias são estruturas de dados hierárquicas.
b) Certa. Em uma lista encadeada, cada elemento contém um ponteiro para o próximo
elemento da lista, exceto o último elemento que aponta para null. Essa estrutura permite
a inserção e remoção eficientes de elementos em qualquer posição da lista, ao contrário de
uma estrutura de dados como um array, que requer realocação de memória para inserções
e remoções no meio da estrutura.
c) Errada. A descrição está correta, mas se refere à fila, não à pilha.
d) Errada. Filas são estruturas de dados do tipo FIFO (First In, First Out) que armazenam os
dados de forma linear. Grafos são estruturas de dados que representam relacionamentos
entre objetos.
e) Errada. A descrição está correta, mas se refere à pilha, não à fila.
Letra b.
Se uma árvore binária completa tem altura h, então ela tem 2^(h+1) - 1 nós.
Como a árvore binária completa em questão tem 15 nós, podemos encontrar sua altura
da seguinte forma:
2^(h+1) - 1 = 15
Simplificando a equação, temos:
2^(h+1) = 16
h+1 = log2(16)
h+1 = 4
h=3
Portanto, a altura da árvore binária completa com 15 nós é 3.
Letra c.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 77 de 79
Conhecimentos Específicos
Estrutura de Dados e Algoritmos
Sérgio Sierro
REFERÊNCIAS
LAFORE, Robert. Estruturas de dados e algoritmos em Java. São Paulo: Pearson, 2004.
SILVA, Bruno; PEREIRA, Leandro. Estrutura de dados: uma abordagem prática. São Paulo:
Novatec Editora, 2018.
TAHOORA, Mohammad Reza Mousavi. Data Structures and Algorithms in Python. 2018.
VIEIRA, Júlio Carlos Balzano. Algoritmos e Estruturas de Dados. São Paulo: Thomson
Learning, 2007.
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.
www.grancursosonline.com.br 78 de 79
Abra
caminhos
crie
futuros
gran.com.br
O conteúdo deste livro eletrônico é licenciado para Foco - , vedada, por quaisquer meios e a qualquer título,
a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal.