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: 51.245 ]
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
Linguagem C - Listas Duplamente Encadeadas
Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
Instalação Uefi com o instalador clássico do Mageia (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta