| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Dilor
Registrado: 21 Jun 2007 Mensajes: 1
| Publicado: 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("\nOPCION NO VALIDA!!\n"); break; } } while (opc!='3'); } |
| | Volver arriba | |  | ethercaos
Registrado: 14 Ago 2007 Mensajes: 2
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |