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: 53.345 ]
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
Linguagem C - Listas Duplamente Encadeadas
Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa
Análise dos Métodos de Ordenação usados em Algoritmos Computacionais
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... (1)
Como programar um sistema de controle para distribuições linux em c? (3)









