/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con lista ordenada

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Dilor



Registrado: 21 Jun 2007
Mensajes: 1

MensajePublicado: 14/11/2007 11:15 am
Título: Problema con lista ordenada

Tengo un problema con la siguiente lista. El tema es que quiero hacer una lista ordenada (una especie de agenda). Lo que quiero hacer es, cada vez que ingreso un nuevo contacto, verificar de ponerlo en el orden correspondiente. Compila pero al ejecutarla puedo agregar contactos, pero hay un momento donde se queda y no hace nada. Estoy seguro que algo está mal y no estoy seguro de que. Si me pueden ayudar se los agradeciria mucho.

Muchas gracias.


#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>

struct agenda
{
char nom[20];
char tel[15];
struct agenda *sig;
};

struct agenda *primero, *ultimo;

void menu()
{
printf("\n\nMen£: \n=====\n\n");
printf("1) A¤adir contactos\n");
printf("2) Mostrar lista\n");
printf("3) Salir\n\n");
printf("Escoge una opci¢n: ");
fflush(stdout);
}

void nvo_contacto()
{
struct agenda *nvo, *aux1, *aux2;
nvo=(struct agenda *) malloc (sizeof(struct agenda));
if (nvo==NULL)
printf("­No hay memoria suficiente!\n");
printf("\n\nNUEVO CONTACTO: \n");
printf("Nombre: ");
fflush(stdout);
gets(nvo->nom);
printf("Tel‚fono: ");
fflush(stdout);
gets(nvo->tel);
nvo->sig=NULL;
if (primero==NULL)
{
printf("Primer elemento\n");
primero=nvo;
ultimo=nvo;
}
else
{
if (primero->sig==NULL)
{
if (nvo->nom < primero->nom)
{
primero=nvo;
primero->sig=ultimo;
}
else
{
ultimo->sig=nvo;
ultimo=nvo;
}
}
aux1=primero->sig;
aux2=primero;
while (aux1!=NULL && nvo->nom > aux1->nom)
{
aux1=aux1->sig;
aux2=aux2->sig;
}
if (aux1==NULL)
{
ultimo->sig=nvo;
ultimo=nvo;
}
else
{
nvo->sig=aux1;
aux2->sig=nvo;
}
}
}

void mostrar_contactos()
{
struct agenda *aux;
int i;
i=0;
aux=primero;
printf("\n\nMostrando la agenda completa:\n");
while (aux!=NULL)
{
printf("Nombre: %s, Tel‚fono: %s\n", aux->nom, aux->tel);
aux=aux->sig;
i++;
}
if (i==0)
printf("\nLa agenda est  vac¡a\n");
}

int main()
{
char opc;
primero=(struct agenda *) NULL;
ultimo=(struct agenda *) NULL;
do
{
menu();
opc=getch();
switch (opc)
{
case '1': nvo_contacto();
break;
case '2': mostrar_contactos();
break;
case '3': exit(1);
default: printf("\n­­OPCION NO VALIDA!!\n");
break;
}
}
while (opc!='3');
}
Volver arriba
ethercaos



Registrado: 14 Ago 2007
Mensajes: 2

MensajePublicado: 01/12/2007 10:14 pm
Título: errores

mira...
1) tienes un error en los conceptos, recuerda que al tu llamar al vector char nom osea en la parte de la comparacion de "nvo->nom <" que el otro el te va a devolver simplemente la dir en memoria de ambos vectores por ende no estar organizando nada, ya que el SO se encarga de guardar dichos vectores aleatoriamente en memoria.. en segunda instancia, tienes un cocepto malo de lista, yo te recomiendo que en ves ordenar los datos directamente en memoria guardes todo en vectores, me explico, supongamos que tienes 4 contactos creas 4 vectores de n posiciones cada uno osea una matriz, para los nombres y asi para los demas campos, y luego trabajas con el valor ascii de cada caracter, si quieres escribeme al mail y te mando un trabajo que hice donde tambien trabajo una agenda, y ORDENA muy bien.

suerte con eso

ahh por cierto mi mail es...
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com