Mas ayuda please
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
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
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.
#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.
