Buscar

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

Universidade Federal de Uberlândia (UFU) 
 
Sistemas de Informação 
 
 
 
 
Heap 
 
 
 
 
 Orientador: Daniel Duarte Abdala 
 
 
 
Adelson Pacheco dos Reis 
Lucas Rodrigues da Cunha 
Valdomiro Caetano Martins 
 
 
 
 
 
 
 
 
 
 
Monte Carmelo 
2013 
2 
RESUMO 
 
 
 
Este trabalho tem o objetivo de mostrar e descrever o funcionamento da estrutura de 
dados Heap, na qual é implementada em um vetor como árvore binária. 
 
Palavras-chave: heap, dado, numero. 
3 
INTRODUÇÃO 
 
Uma Heap é uma estrutura de dados implementada como árvore binária seguindo 
ordens de prioridade. Em uma “Max Heap” todos os filhos devem ser menores que 
seus respectivos pais. Já no caso de uma “Min Heap” todos os filhos devem ser 
maiores que seus pais. 
O elemento Raiz é armazenado na primeira posição do vetor, o filho á esquerda 
segue a regra de posicionamento (2*índice)+1 e o filho á direita (2*índice)+2, onde 
índice é a posição do pai. Esta regra vale para todos os demais nós filhos. 
As principais aplicações da Estrutura Heap são na implementação de Filas de 
prioridade e em alguns algoritmos como o algoritmo de ordenação HeapSort e 
algoritmos como o de Djikstra. 
Observação: 
A estrutura de dados Heap não é a mesma coisa que a heap que é referenciada 
como a região de memória utilizada para alocação dinâmica. 
 
 
 
 
 
A estrutura utilizada foi do tipo struct “Heap”, com uma entrada de dados do tipo Int 
que receberá o número a ser inserido. A estrutura foi colocada na forma de array, já 
que a Heap permite que sua estruturação seja feita de forma estática. 
As opções presentes no algoritmo são: 
• Inserção; 
• Remoção do maior valor; 
• Exibição da Heap. 
 
 
4 
1 FUNÇÃO DE INSERÇÃO 
 
 
 
Na função de inserção é passado o vetor do tipo Struct e um contador por referência. 
Este contador é utilizado para controle de quantidade de elementos adicionados na 
heap. Logo após o recebimento do elemento, ele é passado na função 
verifica_inseridos para verificar se já existe o mesmo elemento cadastrado na Heap. 
Caso haja, ele não será inserido na Heap. 
5 
2 FUNÇÃO TROCA 
Função responsável por verificar se existe algum no filho maior que o pai. Se existir, 
ela inverte o pai com o filho. 
 
 
 
A função troca funciona da seguinte maneira: 
Toda vez que um número é armazenado na Heap, essa função é chamada para 
colocá-lo no seu devido lugar, de acordo com a lógica apresentada: Todo filho deve 
ser menor que o pai. 
Para saber se um número é maior que seu pai e, eventualmente, ordenar toda a 
Heap, foi preciso fazer um laço para percorrê-la. Além disso, foi necessário duas 
estruturas de validação (para conferir se a posição do número é impar ou par). Em 
ambas as estruturas, é verificado se o filho é maior que o pai. 
 
6 
3 FUNÇÃO DE VERIFICAÇÃO DE ELEMENTOS INSERIDO 
 
 
A função verifica_inseridos recebe como argumentos: 
• A Heap; 
• O “cont” contendo a quantidade de elementos da Heap; 
• Um string “dado” com o dado a ser inserido na Heap; 
• A variável “num”, que é passada por referencia. 
Logo a string “dado” e a variável “num” são passadas para a função eh_numero que 
faz a verificação se o dado é um numero. Caso seja inválido, a mensagem de 
caractere inválido será exibida, senão será executado o laço que irá percorrer toda a 
Heap testando se já existe o mesmo número inserido. Se existir será retornado o 
valor 0, caso contrário é retornado 1. 
 
7 
4 FUNÇÃO DE REMOÇÃO DO MAIOR VALOR 
 
 
A função de remoção recebe a Heap e o “cont” passado por referência - para saber 
a quantidade de elementos da Heap e caso a exclusão seja feita, o “cont” precisar 
ser alterado -. Para remoção em uma estrutura de Dados Heap, seguimos a regra de 
remover apenas a raiz. 
Em primeiro caso verifica-se se a Heap está vazia. Caso esteja, é mostrada a 
mensagem de Heap vazia, caso contrário a raiz será removida e cada elemento é 
movimentado para a posição anterior da que se encontrava. Em seguida, o contador 
é decrementado e a Heap é envida para a função troca pra verificar se existe algum 
nó no lugar errado e reorganizá-la. 
 
8 
5 FUNÇÃO DE EXIBIÇÃO 
 
 
A função de exibição é recebida a Heap e seu tamanho, representado pela variável 
“cont”. Primeiro é verificada se a Heap está vazia. Caso esteja a mensagem de Heap 
vazia é mostrada, senão o laço será executado enquanto o contador do laço for 
menor que a quantidade de elementos da Heap e cada elemento contido na Heap 
será mostrado. 
9 
6 FUNÇÃO DE VALIDAR O ELEMENTO INSERIDO 
 
 
 
Função usada para aceitar apenas números. Ela recebe um char com o dado e o 
transforma em int, passando por várias verificações e restrições. 
Primeiramente é analisado se o primeiro caractere é um “–“. Se for, a variável “tam” 
é inicialmente incrementada (isto acontece pois é a variável “tam” que determina se 
todos os caracteres da string foram transformados em inteiros). Caso contrário, “tam” 
não é incrementada, pois logicamente o número é positivo. 
Em ambas as condições, um laço percorre toda a string verificando se cada 
caractere corresponde a um inteiro da tabela Ascii. Caso seja, a variável “num” 
recebe o seu próprio valor somado com o dado multiplicado por sua ordem. 
10 
Logo depois é verificado se os todos os caracteres foram transformados em inteiro. 
Se a condição for satisfeita, a variável “numero” – passada por parâmetro – recebe 
seu devido valor e a função retorna sucesso. Caso a condição não é satisfeita, a 
função falha.