








Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Aula de Algoritmo e Estrutura de Dados do Professor Patrick Pedreira.
Tipologia: Notas de aula
1 / 14
Esta página não é visível na pré-visualização
Não perca as partes importantes!









Fila É um tipo especial de lista, caracterizada pela forma como seus elementos são inseridos e removidos. Numa fila, os primeiros elementos inseridos são os primeiros a serem removidos. FIFO (First In, First Out) Exemplo: Imaginemos uma fila de ônibus. Inicialmente, não temos ninguém na fila. Depois, chega uma pessoa à fila, que ficará na primeira posição. A próxima pessoa ficará atrás da primeira (em segundo) e assim sucessivamente. Quando o ônibus chegar, obrigatoriamente a primeira pessoa da fila deverá entrar, seguida da segunda pessoa da fila e assim por diante. Portanto, a primeira pessoa a entrar na fila também será a primeira a sair dela. Consideramos que os elementos são inseridos no final da fila e removidos a partir do início.
Precisamos manter os ponteiros para o início e o final da fila, já que a entrada e a saída de elementos se dão por essas vias. Consideraremos o mesmo exemplo dos livros vistos nas aulas anteriores
Quando enfileiramos um elementos, não precisamos buscar uma posição específica. Todo elemento é inserido no final da fila
Sempre começa pelo início da fila, não fazendo sentido busca o elemento por uma determinada posição
Pilhas É um tipo especial de lista, caracterizada pela forma como seus elementos são inseridos e removidos. Os últimos elementos inseridos são os primeiros a serem removidos. LIFO (Last In, First Out) Exemplo: Imaginemos uma pilha de livros sobre uma mesa. Inicialmente, não temos nenhum livro. Depois, colocamos o primeiro livro na mesa. O próximo livro ficará em cima do primeiro e assim sucessivamente. Quando formos remover um livro, obrigatoriamente teremos que pegar o livro que está em cima (ou no topo) da pilha Portanto, o primeiro elemento a ser removido será o último elemento que foi inserido na pilha.
No empilhamento, não precisamos buscar uma posição já que todo elemento é inserido no topo da pilha
O desempilhamento (remoção) sempre começa pelo topo, não precisando buscar o elemento a ser removido em uma determinada posição
Chamamos esse elemento de raiz.
Dizemos que esses elementos são seus galhos ou filhos.
Caso haja mais de um caminho, a estrutura em questão é um grafo, portanto, urna árvore éé uma especializauma especializaçção de umão de um grafo.grafo.
1. Todos os nós têm ao menos uma ligação.
2. Todos os nós são acessíveis a partir da raiz.
3. Existe um único caminho entre a raiz e qualquer outro nó.
Uma árvore é dividida em níveis, e o nó-raiz está no nível O, os nós-filhos da raiz estão no nível 1, etc.
Ou seja, cada nó de distância da raiz determina um novo nível.
A altura (h) de uma árvore é a quantidade de nós que existe entre a raiz e a folha mais distante da árvore, ou seja, o maior nível da árvore + 1.
Todas as folhas não precisam estar no mesmo nível da árvore.
Por exemplo, a árvore da figura anterior tem altura 4, apesar de termos o nó-folha 5 no nível 2.
Exemplos de utilização de árvores.
Em um sistema operacional os arquivos são armazenados em uma árvore de diretórios (figura do próximo slide)
Outro exemplo é a árvore genealógica. A relação entre pais e filhos é inerentemente hierárquica e, por isso mesmo, apropriada para representação por meio de uma árvore.
José é um senhor com 95 anos. Ele teve quatro filhos: Carlos, Marco, Flávio e Lucas.
Carlos teve uma filha chamada Luíza. Marco teve dois filhos, André e Roberto. Flávio teve um filho, Marcelo. Lucas não teve filhos.
Luíza teve duas filhas: Helena e Cristina. André teve um filho, Mateus. Roberto e Marcelo não tiveram filhos.
Dados os valores 1, 2, 3, 4, 5, 6, 7, 8, 10, 15, 20, 25, 30, 35 e 41, desenhe a “melhor” árvore binária para seu armazenamento.
A resolução desse problema passa pela descoberta do que seria a “melhor” árvore binária.
Como estamos tratando de uma árvore de pesquisa, a melhor árvore é a que garante o menor caminho para o acesso a qualquer elemento.
Para que isso ocorra, precisamos que os elementos se distribuam da forma mais homogênea possível.
Se todas as folhas se encontrarem no mesmo nível, teremos a menor altura possível para a árvore.
Para que tenhamos a distribuição desejada na árvore, é preciso que haja um número igual (ou quase) de elementos nas subárvores esquerda e direita da raiz. Essa regra se aplica a todo o nó-pai na árvore.
Em nosso problema, portanto, Precisamos definir o elemento mediano (que tem metade dos elementos maior que ele e metade menor) como raiz.
Em nosso caso, a chave ideal para raiz é o número 8, pois são 7 elementos menores que 8 e 7 maiores (não confundir o elemento mediano com a média dos elementos). Aplicando a mesma lógica aos conjuntos da esquerda (1, 2, 3, 4, 5, 6, 7) e da direita (10, 15,20,25,30,35,41) encontraremos como raízes das subárvores os nós 4 e 25. Repetindo o processo sucessivamente, teremos a seguinte árvore:
Exercício
1 – Otimize a distribuição da árvore seguinte diminuindo ao máximo a altura da árvore
2- Construa uma árvore binária com a menor altura possível com os elementos: 1, 3, 5, 7, 12, 34, 35, 55, 69, 70, 72, 75, 80, 82, 85 e 87.
Iniciação
Inserção
Busca
Remoção
Término
Aproveitou-se do fato da estrutura da árvore ser recorrente, ou seja, cada nó da árvore pode ser considerado a raiz da subárvore abaixo dele, sendo desenvolvida uma módulo recorrente de inserção
A função Busca_Nova_Raiz é ativada no caso 3, quando o nó tem 2 filhos. Neste caso, encontramos a raiz substituta, copiamos o dado para o nó que seria removido, mantemos a árvore conexa ligando o pai da raiz substituta com o filho à direita e liberamos o nó da raiz substituta.