[C con Clase] listas simples

felician draghici felix1900toamna en yahoo.es
Mar Mar 26 20:21:00 CET 2013


Lo primero muchas gracias para tu respuesta Elois@, ya casi lo tengo acabado,me falta hacer la funcion para modificar.
El ejercicio queda asi , menos con la funcion de modificar  numeros en la lista simple.Saludos y otra vez gracias

 
   /*Ejercicio listas simples
  -Insertar numeros en la lista
  -Mostrar numeros de la lista
  -Borrar
  -Modificar
  -Consultar */
 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct Nodo{
          int numero;
          Nodo *sig;
       };
       
int menu(void);
struct Nodo * inserta_elemento(struct Nodo *,int n);
struct Nodo * borra_elemento(struct Nodo *inicio);
struct Nodo * eliminar_lista(struct Nodo *);
struct Nodo * modifica_elemento(struct Nodo *inicio);
void consulta(struct Nodo *);
void listar_lista(struct Nodo *);
       
int main (void)
{
    int opc,n;
    Nodo *aux,*inicio,*actual;
    inicio=NULL;
    do
    {
     opc=menu();
     switch(opc)
     {
       case 1:system("cls");
              inicio=inserta_elemento(inicio,n);//insertar elemento
                         break;
       case 2:system("cls");
              inicio=borra_elemento(inicio);//borrar elemento
                         break;
       case 3:system("cls");
              inicio=eliminar_lista(inicio);//eliminar contenido lista
                         break;
       case 4:system("cls");
              inicio=modifica_elemento(inicio);//modificar numero en lista
                         break;
       case 5:system("cls");
              listar_lista(inicio);//listar lista
                         break;
       case 6:system("cls");
              consulta(inicio);//consultar elemento
                         break;
     }             
    }while(opc != 7);
   
getch();   
}
int menu(void)
{
    int opcion;
    system("cls");
    printf("\n\n*** Teclee una opcion: \n\n\n");
    printf("\n1) Insertar un elemento en la lista");
    printf("\n2) Borrar elemento de la lista");
    printf("\n3) Eliminar el contenido de la lista");
    printf("\n4) Modificar un numero en la lista");
    printf("\n5) Mostrar el contenido de la lista");
    printf("\n6) Consulta de un numero en la lista");
    printf("\n7) Salir del programa\n\n---> ");
    scanf("%d",&opcion);
    fflush(stdin); 
    
    return opcion;
}
struct Nodo* inserta_elemento(struct Nodo *inicio,int n)
{
    struct Nodo *aux,*actual;
    char seguir;
    inicio=NULL;
    
    printf("\n\t***Insertar numeros***\n");
    
    do
    {   
      printf("\nTeclea un numero: ");
      scanf("%d",&n);
      fflush(stdin);
      
      if(n==0)
      {
        return inicio;
      }
      aux=new struct Nodo;
      aux->numero=n;
      aux->sig=NULL;
      
      printf("%d",aux->numero);
      
      if(inicio==NULL)
      {
         inicio=aux;
      }
      else
      {
         if(inicio->numero > n) // si el numero leido es < que el primero
         {
            aux->sig=inicio;
            inicio=aux;
         }
         else
         {
            actual=inicio;
            while(actual->sig!=NULL && actual->sig->numero < n)
            {
               actual=actual->sig;
            }
            aux->sig=actual->sig;
            actual->sig=aux;
         }
      }
    }while(n != -0);
   
}
 
//Funcion para borrar un numero de la lista
struct Nodo * borra_elemento(struct Nodo *inicio)
{
    struct Nodo *actual;
    int borra_num;
    
    printf("\n\t***Borrar un elemento de la lista***");
    
    if(inicio==NULL)
    {
       printf("\nNo hay numero para borrar ");
    }
    else
    {
       printf("\n\nIntroduce un numero a borrar: ");
       scanf("%d",&borra_num);
       fflush(stdin);
       
       while(inicio!=NULL)
       { 
          actual=inicio;
          inicio=inicio->sig;
          actual->sig=NULL;
          
          if(borra_num == inicio->numero)
          {
              delete actual;         
          }
       }              
    } 
       
getch();    
return inicio;
}
 
//Funcion para eliminar el contenido de la lista
struct Nodo * eliminar_lista(struct Nodo *inicio)
{
    struct Nodo *actual;
    
    printf("\n\t***Borrado completo de lista***\n");
    
    if(inicio==NULL)
    {
        printf("\nLa lista esta vacia");
    }
    else
    {      
       while(inicio!=NULL)
       {     
          actual=inicio;                    
          inicio=inicio->sig;
          actual->sig=NULL;
          delete actual;
       }
    printf("\nLa lista ha sido eliminada");       
    }
    
getch(); 
return inicio;    
}
 
//Funcion para modificar elementos en la lista
struct Nodo * modifica_elemento(struct Nodo *inicio)
{
    struct Nodo *actual;
    
getch();
return inicio;  
}
 
//Funcion para consultar numeros en la lista
void consulta(struct Nodo *inicio)
{
     struct Nodo *actual;
     int num_cons;//numero que se quiere consultar
     actual=inicio;
     
     printf("\n\t***Consulta de numeros ***\n");
     printf("\nIntroduce el numero a buscar: ");
     scanf("%d",&num_cons);
     fflush(stdin);
     
     int encontrado=0;
     
     if(inicio==NULL)
     {
        printf("\nNo hay numeros en la lista");
     }
     else
     {
        while(actual != NULL)
        {
            if(actual->numero == num_cons)
            {
               encontrado = 1;              
            }
            actual=actual->sig;
        }
     }
     
     if(inicio!=NULL)
     {
        if(encontrado==1)
        {
           printf("\nEl numero %d esta en la lista",num_cons);
        }
        else
        {
           printf("\nEl numero buscado no se encuentra en la lista");
        }               
     }
     
getch(); 
}

//Funcion para mostrar todos los numeros de la lista
void listar_lista(struct Nodo *inicio)
{
     struct Nodo *actual;
     
     printf("\n\t***Listar lista***\n");
     
     if(inicio == NULL)
     {
        printf("\nLa lista esta vacia");
     }
     else
     {
       actual=inicio;
       printf("\nLos numeros de la lista son:\n");
       while(actual != NULL)
       { 
          printf("\n%d",actual->numero);
          actual=actual->sig;  
       }
     }
getch();
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130326/87bb96c0/attachment.html>


Más información sobre la lista de distribución Cconclase