[ create a new paste ] login | about

Link: http://codepad.org/qkNxYv08    [ raw code | output | fork ]

C, pasted on Sep 1:
#include <stdio.h>
#include <stdlib.h>

struct tipo_lista_libro {
    char titulo[20];
    char autor[25];
    float precio;
    struct tipo_lista_libro *sig;
};

struct tipo_lista_libro *anadir_libro_lista(struct tipo_lista_libro libro, struct tipo_lista_libro *lista);
struct tipo_lista_libro *ordenar_lista_libros_seleccion(struct tipo_lista_libro *lista);
void imprimir_lista_libros(struct tipo_lista_libro *lista);

int main()
{
    struct tipo_lista_libro libro;
    struct tipo_lista_libro *lista_libros=NULL;
    int i=0;
    char titulo[25]="", autor[25]="";

    for (i=0; i<10; i++) {
        sprintf(libro.titulo, "libro %c%c",(i%3)+65, (i%5)+69);
        sprintf(libro.autor, "Autor %c",i+48);
        libro.precio = (i +20)*1.16 + (1.35)*i;
        lista_libros = anadir_libro_lista(libro,lista_libros);
    }

    printf("Lista desordenada:\n");
    imprimir_lista_libros(lista_libros);
    lista_libros = ordenar_lista_libros_seleccion(lista_libros);
    printf("\nLista ordenada por titulo:\n");
    imprimir_lista_libros(lista_libros);

    return 0;
}

//Esta función nos permite añadir nuevos libros a una lista. Recibe como parámetros una estructura con los datos del libro y
//un puntero al inicio de la lista. La función devuelve el puntero al inicio de la lista de libros con el nuevo incluido.
struct tipo_lista_libro *anadir_libro_lista(struct tipo_lista_libro libro, struct tipo_lista_libro *lista) {
    struct tipo_lista_libro *item_lista = NULL;

    item_lista=(struct tipo_lista_libro *)malloc(sizeof(struct tipo_lista_libro));
    strcpy(item_lista->autor, libro.autor);
    strcpy(item_lista->titulo, libro.titulo);
    item_lista->precio = libro.precio;
    item_lista->sig = NULL;

    if (lista==NULL) {
        lista = item_lista;
    } else {
        item_lista->sig = lista;
        lista = item_lista;
    }

    return lista;
}

//Esta función permite ordenar una lista de nodos que guardan la información relativa a los
//libros utilizando el campo título. El algoritmo de ordenación implementado es el de selección.
struct tipo_lista_libro *ordenar_lista_libros_seleccion(struct tipo_lista_libro *lista) {
    struct tipo_lista_libro *lista_aux = NULL, *lista_aux2 = NULL;
    struct tipo_lista_libro libro;

    lista_aux = lista;
    if (lista != NULL) {
        while (lista_aux->sig != NULL) {
            lista_aux2 = lista_aux->sig;
            while (lista_aux2 != NULL) {
                if (strcmp(lista_aux->titulo, lista_aux2->titulo)>0) {
                    //Copiamos el contenido de lista_aux a una variable temporal
//                    memcpy(&libro,lista_aux,sizeof(libro));
                    strcpy(libro.titulo, lista_aux->titulo);
                    strcpy(libro.autor, lista_aux->autor);
                    libro.precio = lista_aux->precio;
                    //Copiamos el contenido de lista_aux2 a lista_aux
                    strcpy(lista_aux->titulo, lista_aux2->titulo);
                    strcpy(lista_aux->autor, lista_aux2->autor);
                    lista_aux->precio = lista_aux2->precio;
                    //Copiamos en lista_aux2 el contenido de la variable auxiliar
                    strcpy(lista_aux2->titulo, libro.titulo);
                    strcpy(lista_aux2->autor, libro.autor);
                    lista_aux2->precio = libro.precio;
                }
                lista_aux2 = lista_aux2->sig;
            }
            lista_aux = lista_aux->sig;
        }
    }
    return lista;
}

//Esta función realiza la tarea de mostrar por pantalla el contenido de una lista de libros.
void imprimir_lista_libros(struct tipo_lista_libro *lista) {
    struct tipo_lista_libro *ptr_aux=NULL;

    if (lista!=NULL) {
        printf("\n    LIBROS ORDENADOS POR TITULO ...........\n\n");
        ptr_aux = lista;
        while (ptr_aux!=NULL) {
            printf("    Titulo: %s      Autor: %s\n",ptr_aux->titulo, ptr_aux->autor);
            ptr_aux = ptr_aux->sig;
        }
        printf("\n");
    }
}


Output:
Lista desordenada:

    LIBROS ORDENADOS POR TITULO ...........

    Titulo: libro AI      Autor: Autor 9
    Titulo: libro CH      Autor: Autor 8
    Titulo: libro BG      Autor: Autor 7
    Titulo: libro AF      Autor: Autor 6
    Titulo: libro CE      Autor: Autor 5
    Titulo: libro BI      Autor: Autor 4
    Titulo: libro AH      Autor: Autor 3
    Titulo: libro CG      Autor: Autor 2
    Titulo: libro BF      Autor: Autor 1
    Titulo: libro AE      Autor: Autor 0


Lista ordenada por titulo:

    LIBROS ORDENADOS POR TITULO ...........

    Titulo: libro AE      Autor: Autor 0
    Titulo: libro AF      Autor: Autor 6
    Titulo: libro AH      Autor: Autor 3
    Titulo: libro AI      Autor: Autor 9
    Titulo: libro BF      Autor: Autor 1
    Titulo: libro BG      Autor: Autor 7
    Titulo: libro BI      Autor: Autor 4
    Titulo: libro CE      Autor: Autor 5
    Titulo: libro CG      Autor: Autor 2
    Titulo: libro CH      Autor: Autor 8



Create a new paste based on this one


Comments: