/
Inicio :: Foros

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

Ayuda con ordenamiento de lista

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
JoseRR



Registrado: 06 Jul 2011
Mensajes: 18

MensajePublicado: 24/07/2014 9:05 am
Título: Ayuda con ordenamiento de lista

Buenas amigo, estoy haciendo una agenda telefónica con listas enlazadas tiene 2 campos, Nombre y Telefono, quiero que ordene la agenda por orden alfabético tomando en cuenta el nombre obvio pero no eh logrado conseguirlo

aquí les dejo el código a ver si me pueden ayudar por favor Sad

Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
 
 void mostrar_menu();
 void menu2();
 void anadir_contacto();
 void mostrar_lista();
 void crear_archivo();
 void eliminar_primero();
 void eliminar_ultimo();
 void bienvenida();
 void visualizar_agenda();
 void agregar_ultimo();
 void buscar();
 void ordenar_descendente();
 
 struct _agenda {
        char nombre[20];
        char telefono[12];
        struct _agenda *siguiente;
        };
 struct _agenda *primero, *ultimo;
 
main() {
     
     bienvenida();
     mostrar_menu();
     getch();
};
 
 void bienvenida(){
    
    printf ("\t   Bienvenido al programa de creacion de tu agenda electronica\n\n");
 };
 
void ordenar_descendente(){
      
}
 
 
 void visualizar_agenda(){
     
     char caracter;
     FILE *pf;
      system("cls");
     
           if((pf=fopen("miagenda.txt", "rb"))==NULL)
           {
              puts("\nLa agenda no se a creado aun");
              getch();
           }
            puts("\nSu agenda electronica\n");
            caracter = getc(pf);
            while(caracter!=EOF)
                {
                 printf("%c", caracter);
                 caracter = getc(pf);
   
                };
            getch();
           
     };
 
void buscar(){
   char name[20];
   printf ("Nombre a buscar: ");
   scanf ("%s",&name);
   
   _agenda *nodo;
   nodo = (struct _agenda *) malloc(sizeof (struct _agenda));
   nodo = primero;
   
   while(nodo!=NULL){
      if( strcmp( name, nodo->nombre) == 0 ){
      //if( strcmp( name, nodo->nombre)){
         
         printf ("%s | %s",nodo->nombre,nodo->telefono);
      }
      nodo = nodo->siguiente;
   }
}

 void mostrar_menu() {
     char opcion;
    
     printf("\n\nMenu:\n=====\n\n");
      printf("1.- Ingresar nuevo contacto a la agenda\n");
      printf("2.- Borrar primer contacto\n");
      printf("3.- Borrar ultimo elemento\n");
      printf("4.- Mostrar contactos ingresados\n");
      printf("5.- TERMINAR DE GUARDAR CONTACTOS\n");
     printf("6.- Salir\n\n");
      printf("Escoge una opcion: ");fflush(stdout);
     
         opcion = getch();
             switch ( opcion ) {
                case '1': anadir_contacto();
                       break;
                case '2':  eliminar_primero();
                        break;
                case '3': eliminar_ultimo();
                        break;
                case '4': mostrar_lista();
                      break;
                case '5': crear_archivo();
                      break;
            case '6': exit(0);
            
               
            default: printf( "Opción no válida\n" );
                         break;
             }
     
 }
 
 void menu2(){
    
   char op;
   system("cls");
   printf ("Su agenda a sido creada con exito!\n\n");
   printf ("Que decea hacer?\n");
   
   printf ("1.- Visualizar agenda en pantala\n");
   printf ("2.- Abrir miagenda.txt\n");
   printf ("3.- Buscar Contacto\n");
   op=getch();
   
   switch (op){
      
      case '1':
            visualizar_agenda();
         break;
      case '2':
         system("\"miagenda.txt");
          system("cls");
         printf ("\n\nagenda Abierta.");
         break;
      
        case '3': buscar();
                  break;
        default:
         printf ("\nEsta opcion no es valida");
         getch();
         menu2();
   }
    
 };
 
 
 /* Con esta función añadimos un elemento al final de la lista */
 void anadir_contacto() {
      struct _agenda *nuevo;
 
      /* reservamos memoria para el nuevo elemento */
      nuevo = (struct _agenda *) malloc(sizeof(struct _agenda));
      if (nuevo==NULL) printf( "No hay memoria disponible!\n");
 
     
     
      printf("\nNuevo Contacto:\n");
      printf("Nombre: "); fflush(stdout);
      gets(nuevo->nombre);   
      printf("Teléfono: "); fflush(stdout);
      gets(nuevo->telefono);
 
      /* el campo siguiente va a ser NULL por ser el último elemento
         de la lista */
      nuevo->siguiente = NULL;
 
      /* ahora metemos el nuevo elemento en la lista. lo situamos
         al final de la lista */
      /* comprobamos si la lista está vacía. si primero==NULL es que no
         hay ningún elemento en la lista. también vale ultimo==NULL */
      if (primero==NULL) {
         printf( "Primer elemento\n");
         primero = nuevo;
         ultimo = nuevo;
         }
      else {
           /* el que hasta ahora era el último tiene que apuntar al nuevo */
           ultimo->siguiente = nuevo;
           /* hacemos que el nuevo sea ahora el último */
           ultimo = nuevo;
      }
      system("pause");
     system("cls");
     main();
 }
 
 /*void ordenarLista(_agenda _actual){
     
     while(_agenda->siguiente != NULL)
     {
          siguiente = actual->siguiente;
         
          while(siguiente!=NULL)
          {
               if(actual->nombre > siguiente->nombre)
               {
                    t = siguiente->nombre;
                    siguiente->nombre = actual->nombre;
                    actual->nombre = t;         
               }
               siguiente = siguiente->siguiente;                   
          }   
          actual = actual->siguiente;
          siguiente = actual->siguiente;
           
     }
     
}*/

 
 void mostrar_lista() {
      struct _agenda *auxiliar,*siguiente; /* lo usamos para recorrer la lista */
     
     int i;
 
      i=0;
     auxiliar = primero;
      printf("\n\nMostrando la lista completa:\n\n");
      while (auxiliar!=NULL) {
            printf( "Nombre: %s | Telefono: %s\n",auxiliar->nombre,auxiliar->telefono);
            auxiliar = auxiliar->siguiente;
            i++;
      }
      if (i==0) printf( "\nLa lista está vacia!!\n" );
     
      system("pause");
     system("cls");
     main();
 }

 
 
 void eliminar_primero(){ //Funcion para eliminar primera letra del avecedario
   
     struct _agenda *auxiliar; //Se crea un nodo auxiliar
     auxiliar = primero;   //a axuxiliar se le asigna la primera letra
     primero = primero->siguiente; // primero se la asigna la segunda letra
     free( auxiliar ); // liberas memoria la memoria de auxiliar que viene siendo la primera letra borrandola de la lista
     printf ("\n");
     printf ("\nContacto eliminado\n");
     system("pause");
     system("cls");
     main();
};

void eliminar_ultimo(){ // Funcion para rliminar el ultimo de la lista
   _agenda *auxiliar = primero; // Se crea un nodo llamado auxiliar a la cual se le asigna la primera letra
   while( auxiliar != NULL ) { //Mientras que auxiliar no sea NULL
      
      if( auxiliar->siguiente != NULL && auxiliar->siguiente->siguiente == NULL ) //Si la que le sigue a auxiliar no es null
      {                                                         //y la que le sigue a la siguiente de auxiliar es null
         // significa que auxiliar es el penúltimo
         free( auxiliar->siguiente ); // borrás el úlitmo
            auxiliar->siguiente = NULL; // auxiliar pasa a ser ultimo
      }
      auxiliar = auxiliar->siguiente;
   }
   printf ("\n");
    printf ("\nContacto eliminado\n");
    system("pause");
    system("cls");
    main();
};
 
 
 
 void crear_archivo(){
   
   struct _agenda *auxiliar;
   FILE *archivo;
   auxiliar = primero;
   archivo=fopen("miagenda.txt","a");
   int i;
   if (!archivo)
      {
            printf ("La agenda no fue creada!\n");
               
            }else{

                  while (auxiliar!=NULL){
                     fprintf(archivo,"Nombre:   %s    \nTelefono: %s\n",auxiliar->nombre,auxiliar->telefono);
                     fputs("------------------------------------------\n",archivo);
                  auxiliar = auxiliar->siguiente;
                     i++;
                  };
     
     
                
                      printf ("\n");
                     
               
                      }
                fclose(archivo);
               
      menu2();
     
};
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
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