Mas ayuda please

andresfl
05 de Febrero del 2005
Otras rutinas mas que solicito:

Realizar una rutina para:

a.- Crear una lista doblemente ligada
b.- Hacer una búsqueda en una lista circular
c.- Recorrer una lista doblemente ligada de izquierda a derecha
d.- Eliminar un nodo en un árbol binario ordenado

Espero que no de muchas molestias
Saludos y les agradezco

Rev
05 de Febrero del 2005
Mira te doy esta agenda que usa listas doblemente enlazadas que ya había hecho hace tiempo, lo del recorrido solo estudia el codigo y verás que agregando unas cuantas líneas lo haces, la busqueda en una lista circular con esto lo haces solo modificando el nodo último y decidiendo que valor vas a buscar, en cuánto al árbol binario será mejor que no te hagas ilusiones si no entiendes ni siquiera esto:

#include <stdio.h>
#include <conio.h>
#include <alloc.h>
short int menu(void);
void Agregar_Contacto(void);
void Borrar_Contacto(void);
short int Ver_Contacto(void);

#define ESC 27

struct _agenda
{
char nombre[30];
int edad;
char telefono[15];
struct _agenda *siguiente;
struct _agenda *anterior;
};

struct _agenda *primero,*ultimo;
int cont_agenda=0;

void main(void)
{
primero=(struct _agenda *)malloc(sizeof(struct _agenda));
ultimo=(struct _agenda *)malloc(sizeof(struct _agenda));

if(primero!=NULL && ultimo!=NULL)
{
primero=NULL;

do
{
clrscr();
}while(menu()!=4);

printf("nnn Presione una tecla para salir...");
}
else
printf("nnn ­ Error de Memoria(primero - ultimo, Main)!");

getch();
}

short int menu(void)
{
short int opcion;

printf("nnntt Agenda (Listas Doblemente Enlazadas)");
printf("nnn 1.- Agregar Nuevo Contacto");
printf("nn 2.- Borrar Contacto");
printf("nn 3.- Ver Lista de Contactos");
printf("nn 4.- Salir");
printf("nn Elija una opcion: ");
fflush(stdin);
scanf("%d",&opcion);

switch(opcion)
{
case 1:
Agregar_Contacto();
break;
case 2:
Borrar_Contacto();
break;
case 3:
Ver_Contacto();
getch(); break;
case 4:
break;
default:
printf("nnn ­ Opcion no Valida !");
getch(); break;
}

return(opcion);
}

void Agregar_Contacto(void)
{
struct _agenda *nuevo;

nuevo=(struct _agenda *)malloc(sizeof(struct _agenda));

if(nuevo!=NULL)
{
cont_agenda++;
printf("nnn Nombre del Nuevo Contacto: ");
fflush(stdin); gets(nuevo->nombre);
printf("nn Edad del Nuevo Contacto: ");
fflush(stdin); scanf("%d",&nuevo->edad);
printf("nn Telefono del Nuevo Contacto: ");
fflush(stdin); gets(nuevo->telefono);
nuevo->siguiente=NULL;

if(primero==NULL)
{
nuevo->anterior=NULL;
primero=nuevo;
}
else
{
ultimo->siguiente=nuevo;
nuevo->anterior=ultimo;
}

ultimo=nuevo;
printf("nnn ­ Contacto Agregado Correctamente !");
}//if(nuevo!=NULL)
else
printf("nnn ­ Error de Memoria(nuevo, Agregar_Contacto) !");

getch();
}

void Borrar_Contacto(void)
{
if(primero!=NULL)
{
struct _agenda *borrar,*aux;
short int cont_a_borrar;

borrar=(struct _agenda *)malloc(sizeof(struct _agenda));
aux=(struct _agenda *)malloc(sizeof(struct _agenda));

if(borrar!=NULL && aux!=NULL)
{
if(Ver_Contacto())
{
do
{
printf("nnn Que Contacto deseas Borrar?: ");
fflush(stdin); scanf("%d",cont_a_borrar);

switch(cont_a_borrar)
{
case 1:
borrar=primero;
primero=primero->siguiente;
primero->anterior=NULL;
borrar->siguiente=NULL;
free(borrar);
cont_agenda--;
break;
default:
if(cont_a_borrar>cont_agenda)
{
printf("nnn ­ No existe el no. del Contacto !");
getch();
}
else
{
borrar=primero;
for(short int a=2;a<=cont_a_borrar;a++)
borrar=borrar->siguiente;

if(a!=cont_a_borrar)
{
aux=borrar;
aux=aux->anterior;
aux->siguiente=borrar->siguiente;
aux=borrar->siguiente;
aux->anterior=borrar->anterior;
borrar->anterior=NULL;
borrar->siguiente=NULL;
free(borrar);
}
else
{
borrar=ultimo;
ultimo=ultimo->anterior;
ultimo->siguiente=NULL;
free(borrar);
}
}
cont_agenda--;
break;
}//switch(cont_a_borrar)
}while(cont_a_borrar>cont_agenda);

printf("nnn ­ Contacto Borrado Correctamente !");
if(cont_agenda<=0)
primero=NULL;
}//if(Ver_Contacto)
}//if(borrar!=NULL)
else
printf("nnn ­ Memoria Insuficiente(Borrar Contacto) !");
}//if(primero!=NULL)
else
printf("nnn ­ No hay Contactos en la Lista !");

getch();
}

short int Ver_Contacto(void)
{
short int opcion;

if(primero!=NULL)
{
printf("nnn 1.- Ver en Forma de Lista");
printf("nn 2.- Ver a Detalle");
printf("nn Elija una opcion: ");
fflush(stdin); scanf("%d",&opcion);

struct _agenda *mostrar_contacto;
short int cont;

mostrar_contacto=(struct _agenda *)malloc(sizeof(struct _agenda));

if(mostrar_contacto!=NULL)
{
switch(opcion)
{
case 1:
mostrar_contacto=primero;
clrscr();
printf("nnntt Lista de Contactos");

cont=1;
do
{
printf("nnn %d.- %stt",cont,mostrar_contacto->nombre);
printf("nn Edad.- %d",mostrar_contacto->edad);
printf("n Tel .- %s",mostrar_contacto->telefono);
cont++;
mostrar_contacto=mostrar_contacto->siguiente;
}while(mostrar_contacto!=NULL);
break;
case 2:
char tecla;

mostrar_contacto=primero;
cont=1;
do
{
clrscr();
printf("nnntt Lista de Contactos");
printf("nnn %d.- %stt",cont,mostrar_contacto->nombre);
printf("nn Edad.- %d",mostrar_contacto->edad);
printf("n Tel .- %s",mostrar_contacto->telefono);
printf("nnnnnnnn Teclado Numerico");
printf("n << 1(anterior) (siguiente)3 >>");
fflush(stdin);
_setcursortype(0); tecla=getch();

switch(tecla)
{
case 49:
if(mostrar_contacto->anterior!=NULL)
{
mostrar_contacto=mostrar_contacto->anterior;
cont--;
}
else
{
printf("nnn ­ Limite Inferior Alcanzado !");
getch();
}
break;
case 51:
if(mostrar_contacto->siguiente!=NULL)
{
mostrar_contacto=mostrar_contacto->siguiente;
cont++;
}
else
{
printf("nnn ­ Limite Superior Alcanzado !");
getch();
}
break;
}
}while(tecla!=ESC);
break;
}//switch(opcion)
return(1);

}//if(mostrar_contacto!=NULL)
else
{
printf("nnn ­ Error de Memoria(mostrar, Ver_Contacto) !");
return(0);
}
}//if(primero!=NULL)
else
{
printf("nnn ­ La Lista de Contactos esta Vacia !");
return(0);
}
}

Deja de pedir código o programas hechos un foro no fue hecho para eso, tendrías más exito si pones el código y una pregunta bien formulada.
Dudo mucho que alguién te de todo lo que pides.