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'); } |
|