[C] Agenda con listas enlazadas

Iniciado por mr.blood, Junio 11, 2013, 03:14:13 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 11, 2013, 03:14:13 AM Ultima modificación: Febrero 08, 2014, 05:38:35 PM por Expermicid
EDITO: Sorry, Google me trolleó este código no es mío es de myguestp lo confundí con uno mío muy parecido. Todos los créditos a él.




Traigo este código como un pequeño ejemplo de listas enlazadas. Lo hice hace ya un par de años así que seguramente no lo volvería a hacer igual :P.

Código: c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ID_NAME 60
#define ID_APELLIDO1 61
#define ID_APELLIDO2 62
#define ID_TELEFONO 63


typedef struct lista
{
    char nombre[10], apellido1[10], apellido2[10], telefono[10];
    struct lista *siguiente;
}lista;

lista *primero=NULL, *ultimo=NULL;

void cls();
void pause();
void delnewline(char *array);
void additem();
void recorrer();
bool finditem(char *word, int flag);

int main()
{
    int opc, id;
    char word[10], op[10];
    lista *aux;
   
    while(opc!=4)
    {
        printf("Indica que hacer:\n\n 1.Introducir contacto\n 2.Recorrer agenda\n 3.Buscar contacto\n 4.Salir\n\n");
        scanf("%i", &opc);
        cls();
        switch(opc)
        {
            case 1:
                additem();
            break;
            case 2:
                recorrer();
                pause();
            break;
            case 3:
                printf("Indica por que criterio buscar(nombre, apellido1, apellido2 o telefono): ");
                scanf("%s", op);
                delnewline(op);
                if(strcmp(op, "nombre")==0) id=ID_NAME;
                else if(strcmp(op, "apellido1")==0) id=ID_APELLIDO1;
                else if(strcmp(op, "apellido2")==0) id=ID_APELLIDO2;
                else if(strcmp(op, "telefono")==0) id=ID_TELEFONO;
                else break;
                cls();
                printf("Indica la palabra a buscar:\n\n");
                scanf("%s", word);
                cls();
                finditem(word, id);
                pause();
            break;
            case 4:
            break;
            default:
                printf("Elije una opcion correcta");
            break;
        }
        cls();
    }
    aux=primero;
    while(aux!=NULL)
    {
        free(aux);
        aux=aux->siguiente;
    }
    return 0;
}

void cls()
{
    #ifndef WIN32
     system("clear");
    #else
     system("cls");
    #endif
}

void pause()
{
    setbuf(stdin, NULL);
    getchar();
}
void delnewline(char *array)
{
    while(*array!='\0')
    {
        if(*array=='\n')
        {
            *array='\0';
        }
        array++;
    }
}

void additem()
{
    lista *nuevo;
    nuevo=(lista*)malloc(sizeof(lista));
    printf("Introduce el nombre completo(ejemplo: Miguel Ruiz Cruz):\n\n");
    scanf("%s %s %s", nuevo->nombre, nuevo->apellido1, nuevo->apellido2);
    printf("\nIntroduce ahora el numero de telefono(9 cifras): ");
    scanf("%s", nuevo->telefono);
    cls();
    delnewline(nuevo->nombre);
    delnewline(nuevo->apellido1);
    delnewline(nuevo->apellido2);
    delnewline(nuevo->telefono);
    if(primero==NULL)
    {
        primero=(lista*)malloc(sizeof(lista));
        ultimo=(lista*)malloc(sizeof(lista));
        if(!primero || !ultimo)
        {
            printf("No se pudo reservar memoria para el item");
            return;
        }
        primero=nuevo;
        primero->siguiente=ultimo;
        ultimo=nuevo;
        ultimo->siguiente=NULL;
        return;
    }
    ultimo->siguiente=nuevo;
    ultimo=nuevo;
    ultimo->siguiente=NULL;
    return;
}

void recorrer()
{
    lista *aux;
    aux=primero;
    if(aux==NULL)
    {
        printf("Lista vacia");
        return;
    }
    while(aux!=NULL)
    {
        printf("Nombre: %s %s %s  Telefono: %s\n\n", aux->nombre, aux->apellido1, aux->apellido2, aux->telefono);
        aux=aux->siguiente;
    }
    return;
}

bool finditem(char *word, int flag)
{
    lista *aux;
    int cont=0;
    aux=primero;
    if(aux==NULL)
    {
        return false;
    }
    if(flag==ID_NAME)
    {
        while(aux!=NULL)
        {
            if(strcmp(aux->nombre, word)==0)
            {
                printf("Nombre: %s %s %s Telefono: %s\n", aux->nombre, aux->apellido1, aux->apellido2, aux->telefono);
                cont++;
            }
            aux=aux->siguiente;
        }
    }
    else if(flag==ID_APELLIDO1)
    {
        while(aux!=NULL)
        {
            if(strcmp(aux->apellido1, word)==0)
            {
                printf("Nombre: %s %s %s Telefono: %s\n", aux->nombre, aux->apellido1, aux->apellido2, aux->telefono);
                cont++;
            }
            aux=aux->siguiente;
        }
    }
    else if(flag==ID_APELLIDO2)
    {
        while(aux!=NULL)
        {
            if(strcmp(aux->apellido2, word)==0)
            {
                printf("Nombre: %s %s %s Telefono: %s\n", aux->nombre, aux->apellido1, aux->apellido2, aux->telefono);
                cont++;
            }
            aux=aux->siguiente;
        }
    }
    else if(flag==ID_TELEFONO)
    {
        while(aux!=NULL)
        {
            if(strcmp(aux->telefono, word)==0)
            {
                printf("Nombre: %s %s %s Telefono: %s\n", aux->nombre, aux->apellido1, aux->apellido2, aux->telefono);
                cont++;
            }
            aux=aux->siguiente;
        }
    }
    if(cont==0)
    {
        printf("No se encontraron resultados");
        return false;
    }
    printf("\nSe encontraron %i resultados", cont);
    return true;
}


Sa1uDoS