Linguagem C - Árvores Binárias
Neste artigo, falarei sobre o que é e como implementar uma estrutura de dados chamada Árvore Binária. Com tempos de pesquisa, inserção e remoção expressivamente melhores que de listas encadeadas, esta estrutura é usada principalmente em bancos de dados e sistemas de arquivos.
[ Hits: 50.495 ]
Por: Enzo de Brito Ferber em 07/05/2015 | Blog: http://www.maximasonorizacao.com.br
/* fat.c * * Linguagem C - Árvores Binárias * Viva O Linux * * Enzo Ferber */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> double fat (double n) { if (n == 1) return 1; return n * fat(n - 1); // return (n == 1) ? 1 : n * fat(n - 1); } int main (int argc, char *argv[]) { register int i; for (i = 1; i < argc; i++) printf("%s: %.0lf ", argv[i], fat( atof(argv[i]))); return 0; }
/* fib.c * * Linguagem C - Árvores Binárias * Viva O Linux * * Enzo Ferber */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> double fib (double n) { if (n == 0 || n == 1) return 1; return fib(n - 1) + fib(n - 2); // return (n == 0 || n == 1) ? 1 : fib(n - 1) + fib(n - 2); } int main (int argc, char *argv[]) { register int i; for (i = 1; i < argc; i++) printf("%s: %.0lf ", argv[i], fib(atof(argv[i]))); return 0; }
/* bbin.c * * Linguagem C - Árvores Binárias * Viva O Linux * * Enzo Ferber */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int bbin (int *a, int min, int max, int info) { int pos = (min + max) / 2; if (a[pos] == info) return pos; else if (min >= max) return -1; else if (info > a[pos]) return bbin(a, pos + 1, max, info); else return bbin(a, min, pos - 1, info); return -1; } int main (void) { int a[10] = {1,2,3,4,5,6,7,8,9,10}; printf("1: %d ", bbin(a, 0, 10, 1)); printf("5: %d ", bbin(a, 0, 10, 5)); printf("8: %d ", bbin(a, 0, 10, 8)); printf("0: %d ", bbin(a, 0, 10, 0)); printf("9: %d ", bbin(a, 0, 10, 9)); return 0; }
/* bbin2.c * * Linguagem C - Árvores Binárias * Viva O Linux * * Enzo Ferber : enzoferber@gmail.com */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define LIMIT 50000 int counter; int bbin (int *a, int min, int max, int info) { int pos = (min + max) / 2; counter++; if (a[pos] == info) return pos; else if (min >= max) return -1; else if (info > a[pos]) return bbin(a, pos + 1, max, info); else return bbin(a, min, pos - 1, info); return -1; } int main (void) { int a[ LIMIT ]; register int i; int n; for (i = 0; i < LIMIT; i++) a[i] = i + 1; printf("Digite -1 para sair "); while (1) { printf("Digite um número: "); scanf("%d", &n); if (n == -1) break; // contador counter = 0; printf("Posicao no vetor: %d ", bbin(a, 0, LIMIT, n)); printf("Operacoes necessarias: %d ", counter); } return 0; }
Linguagem C - Funções Variádicas
Linguagem C - Listas Duplamente Encadeadas
Dicas para aprender programação
Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa
Análise dos Métodos de Ordenação usados em Algoritmos Computacionais
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET
Instalando Grub Customizer no Ubuntu 24.04
Preparando pendrive com GNU/Linux [Corretamente!]
Instalando Google Chrome no Fedora 40
Habilitando a importação de senhas no Firefox
Como corrigir o erro do VirtualBox travar a máquina virtual em tela cheia
problemas com artefatos na instalação (1)
Livro Use a cabeça redes de computador (0)