/
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
      Í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