Você está na página 1de 4

/*Arvore binaria livraria*/ struct nodo { void *elemento; struct nodo *l; struct nodo *r; struct nodo

*t; }; void inserir(struct nodo **arvore, void *elemento, int (*comparacao) (void *x, v oid *z)) { struct nodo *temp = *arvore; if(temp == NULL) { struct nodo *temp1 = malloc(sizeof(struct nodo)); temp1->elemento = elemento; temp1->l = NULL; temp1->r = NULL; *arvore = temp1; } else { if((comparacao(elemento,temp->elemento)) == -1) // quando meno r inserir(&(temp->l), elemento, comparacao); //se realme nt for menor insere a esquerda else inserir(&(temp->r), elemento, comparacao); //se nao fo r -1 porque maior e assim insere a direita } } void crescente(struct nodo *arvore) // Esta funo q ue lista os nmeros em ordem crescente e mais { //uma ve usa a recursividade para percorrer a arvore toda e listar struct nodo *temp2 = arvore; if(temp2 != NULL) { crescente(temp2->l); printf("\n%s",(char*)&(temp2->elemento)); crescente(temp2->r); } } void decrescente(struct nodo *arvore) mesmo mtodo da funo anterior esta lista os numeros { crescente struct nodo* temp3 = arvore; // Usando o //em ordem de

if(temp3 != NULL) { decrescente(temp3->r); printf("\n%s",(char*)&(temp3->elemento)); decrescente(temp3->l); } } void apagar(struct nodo *arvore) { free(arvore); } ////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// //Main para receber inteiros #include <stdio.h> #include <stdlib.h> #include "funcoes.h" int *compara(void *valor1, void *valor2) // funo de comparao //retorna um inteiro que negativo, zero, ou positivo consoante o primeiro n seja menor, { //igual, ou maior que o segundo int a, b; a = (int)valor1; b = (int)valor2; if (a > b) return 1; else if (a == b) return 0; else if (a < b) return -1; } int main(int argc, char *argv[]) { struct nodo *arvore = NULL; void *elemento; int i; int h,j,noarv,k; printf ("Quantos elementos?"); scanf ("%d", &noarv); for (i=0;i<noarv;i++) { printf ("insira:"); scanf ("%s", &elemento); inserir(&arvore, elemento , compara); // passa o endereo do n ao qual s era inserido elemento, o elemnto a inserir e o retorno da comparaao } printf("\nOs elementos em ordem crescente :\n");

crescente(arvore); scente

//retorno da funcao cre

printf("\nOs elementos em ordem decrescente :\n"); decrescente(arvore); // retorno da funcao decrescente apagar (arvore); // apaga a arvore system("PAUSE"); return 0; } //////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //Main para receber Strings #include <stdio.h> #include <stdlib.h> #include "funcoes.h" int *compara_string (void *a, void *b) { int comp; char *x=(char*)&a; char *y=(char*)&b; comp = strcmp(x,y); //A zero value indicates that both strings are equal //A value greater than zero indi cates that the first character that does not match has a greater value in str1 t han in return comp; } int main(int argc, char *argv[]) { struct nodo *arvore = NULL; void *elemento; int i,h,no; printf ("Insira quantos elementos pretende adicionar a arvore:"); scanf ("%d", &no); for (i=0;i<no;i++) { printf ("Insira os numeros a adicionar na arvore:"); scanf ("%s", &elemento); inserir(&arvore, elemento , compara_string); } printf("\nOs elementos em ordem crescente :\n"); crescente(arvore); printf("\nOs elementos em ordem decrescente :\n"); decrescente(arvore); apagar (arvore); system("PAUSE");

return 0; } ///////////////////////////////////////////// ///////////////////////////////////////////// //Makefile_linux int: mainint.o gcc mainint.o -o int

string: mainstring.o gcc mainstring.o -o string

mainint.o:

mainint.c

gcc -c mainint.c

mainstring.o:

mainstring.c

gcc -c mainstring.c

clean: rm *.o /////////////////////////////////////////////// /////////////////////////////////////////////// //Makefile_Windows SCR = mainint.c mainstring.c OBJ = mainint.obj mainstring.obj PROG = myprog.exe $(PROG) : $(OBJ) cl \Fe$(PROG) $(OBJ) $(OBJ): $(SRC) clean: del /q $(PROG) *.obj *.bak

Você também pode gostar