arboles binarios de busqueda

gunshot
04 de Julio del 2005
Necesito ayuda con un programa de tipo agenda telefonica, programado con arboles binarios de busqueda.
En la que se pide el: apellido, nombre, fono, direccion
y luego se almacenan en un arreglo base a, b, c, d.....z segun apellido, pero la estructura debe kedar en un ABB.

Si alguien tiene algun programa base que me ayude porfa es urgente...
o si esta dispuesto ayudarme con el codigo que tengo echo:

#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<stdlib.h>
#include<string.h>
#define memoria (struct apellidos *)malloc(sizeof(struct apellidos))
struct datos_apellidos{
char apellido[20];
char nombre[20];
int fono;
char direccion[30];
};

struct apellidos{
char apellido[20];
struct apellidos *izq,*der;
struct datos_apellidos datos;
}*ap,*auxapellidos;
int fono;
//--------------------------------------------------------------------------------
//Nombre: inicializacion
//Tipo: constructora
//Entrada: Puntero Raiz
//Salida: raiz inicializada

void inicializa(struct apellidos **ap)
{
*ap=NULL;
}

//Nombre: insercion_binaria
//Tipo: modificadora
//Entrada: Puntero Raiz , valor nuevo
//Salida: arbol modificado
void insercion_apellidos(struct apellidos **ap, char apellid[20])
{
*ap=auxapellidos;
if((*ap)==NULL)
{
(*ap)=memoria;

if((*ap)!=NULL)
{
strcpy((*ap)->apellido,apellid);
(*ap)->der=NULL;
(*ap)->izq=NULL;
strcpy(auxapellidos->datos.apellido,(*ap)->apellido);
printf("nIngrese Nombre: ");
gets(auxapellidos->datos.nombre);
fflush(stdin);
printf("nIngrese fono: ");
scanf("%d",&fono);
fflush(stdin);
auxapellidos->datos.fono=fono;
printf("nIngrese direccion: ");
gets(auxapellidos->datos.direccion);
fflush(stdin);
//imprime los datos para verificar si los graba
printf("nfono> %d",auxapellidos->datos.fono);
printf("napellidoap> %s",(*ap)->apellido);
printf("napellidoaux> %s",auxapellidos->datos.apellido);

//se supone que guarda la estructura
FILE *stream;

if ((stream = fopen("guiatelef.dat", "wb")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.n");

}
fwrite(&ap, sizeof(ap), 1, stream); /* write struct s to file */
fclose(stream); /* close file */

}
else{
printf("%s no insertado.n",apellid);
}
}
else if(apellid>(*ap)->apellido)
insercion_apellidos(&(*ap)->der,apellid);

else if(apellid<(*ap)->apellido)
insercion_apellidos(&(*ap)->izq,apellid);

else printf("Dato duplicado.n");




}

// -----------------------------------------------------------------------------

//Nombre: inorden
//Tipo: analizadora
//Entrada: Puntero Raiz
//Salida: vista del arbol


void inorden (struct apellidos *ap)
{
if(ap!=NULL)
{
inorden(ap->izq);

printf("%s ",ap->apellido);
inorden(ap->der);

}
}




//menu

char apellido[20];
char buscar[20];

int i=0;

void main()

{
clrscr();

inicializa(&ap);
for(i=0;i<3;i++){
printf("nIngrese apellido: ");
gets(apellido);
fflush(stdin);
insercion_apellidos(&ap,apellido);
}
inorden(ap);
clrscr();
printf("nBuscar fono por apellidon");

auxapellidos=ap;
//queriamos buscar el numero de fono por el apellido
//pero no guarda los apellidos...
printf("ningrese apellido a buscar: ");
gets(buscar);
fflush(stdin);

if (strcmp(ap->apellido,buscar)==0)
{
if(auxapellidos->apellido!=NULL)
{
printf("%s",auxapellidos->apellido);
printf("%s",ap->datos.fono);
}
}
else printf("no son iguales");

getch();
}

christian
04 de Junio del 2010
hola , estoy estudiando informatica y a mi me han pedido la misma cosa , queria saber si lograste terminarlo y si me lo puedes mandar por favor ... te lo agradeceria muchisimo... gracias anticipadas