Usuario: anónimo

Usuarios en línea: 1
Invitados: 1

FAQ

Hilo

1m
lista dobleente enlazada
U(hernan diaz) 2017-05-18 22:36:17

COMO ELIMINO PRIMER Y ULTIMO NODO EN UNA LISTA DOBLE???

/*

Trabajo:

1- cuando la lista esta vacía y se selecciona la opción 3. Mostrar un mensaje de lista vacía.

2- Aumentar un campo id. que se genera automáticamente cuando se agrega un nodo.

Hacer una función que se encargue de recorrer la lista buscando el máximo id. y retorne el siguiente.

( si el máximo es 6 retorna 7) y este es el id del nuevo nodo.

2- Hacer que la lista sea doble y en el menú cambiar opción 2: eliminar el ultimo elemento,

3-Eliminar el primer elemento.

4-mostrar lista.

*/

#include <stdio.h>

#include <stdlib.h>

struct nodo

{

    char nombrelibro[40];

    char autor[30];

    int stock;

    float precio;

    int id;

    struct nodo *ps;

    struct nodo *pa;

};

struct nodo *crear_nodo ()

{

    struct nodo *P;

    P=(struct nodo*) malloc(sizeof(struct nodo)); //Pido memoria para el nodo

    if(P==NULL)

        printf("\nError de memoria\n");

    else

    {

        return P; //Retorna la direccion de memoria de un nodo.

    }

}

struct nodo *insertar(struct nodo *ultimo)

{

    struct nodo *nuevo;

    nuevo=crear_nodo(); //creo nodo para ingresarle datos

    nuevo-> id=0;

    printf("\nIngrese nombre del libro: ");

    scanf("%s",nuevo-> nombrelibro);

    printf("\nIngrese autor: ");

    scanf("%s",nuevo-> autor);

    printf("\nIngrese stock disponible: ");

    scanf("%d",&nuevo-> stock);

    printf("\nIngrese PRECIO :");

    scanf("%f",&nuevo-> precio);

    printf("\n__________________________________");

                                            //una vez cargados los datos...

   

     nuevo-> ps=NULL;        //el puntero del nuevo nodo apunta a NULL

    ultimo-> ps=nuevo;       //el puntero del ultimo nodo ahora apunta al nuevo nodo,que pasa a ser el nuevo ultimo elemento

    nuevo-> pa=ultimo;       //el nuevo q se agrega al final su punt anterior apunta al viejo ultimo nodo

    ultimo=nuevo;           //ultimo igual a nuevo

    nuevo->id=(nuevo-> id + 1);           

    return nuevo;

}

struct nodo *mostrar_lista(struct nodo *cabeza)

{

    struct nodo *apuntador;

    apuntador=cabeza-> ps;       //el apuntador a cada nodo sera igual al puntero del 1er elemento de la lista al inicio

    if (apuntador!=NULL)

    {

        printf("\nELEMENTOS DE LA LISTA:\n");

        while (apuntador != NULL)   //mientras que el apuntador no sea NULL(fin de la lista) va a ir mostrando el contenido de cada nodo.

        {   printf("\n__________________________________");

            printf("\n_Nombre del Libro: %s",apuntador-> nombrelibro);

            printf("\n_Nombre del Autor: %s",apuntador-> autor);

            printf("\n_Stock Disponible: %d",apuntador-> stock);

            printf("\n_Precio del libro: %c%6.2f\n",36,apuntador-> precio);

            printf("__________________________________\n");

            apuntador=apuntador-> ps; //va a ir haciendo avanzar el apuntador de nodo en nodo hasta el ultimo.

            

        }

    }

        else

            printf("\nLa lista esta vacia\n");

}

struct nodo *eliminar(struct nodo *cabeza)

{

    struct nodo *apuntador;

    struct nodo *apuntadorAnterior;

    apuntadorAnterior=cabeza;

    apuntador=cabeza-> ps;

    if(apuntador==NULL)

    {

        printf("\nLista Vacia no se puede eliminar elemento\n");

    }

    else

    {

        while((apuntador-> ps)!=NULL) //while que elimina ultimo elemento de la lista

            {

                apuntador=apuntador-> ps;

                apuntadorAnterior=apuntadorAnterior-> ps;

            }

            apuntadorAnterior-> ps=NULL;

            free(apuntador);

            printf("\nNodo eliminado");

    }

    return apuntadorAnterior; //retorno el anterior al ultimo,que pasa a ser el nuevo ultimo elemento

}

int BuscarID(struct nodo *cabeza)

{

    /*

   

    return ID;

    */

}

int main()

{

    system("color 1F");

    int opcion=0;

    float PRECIO=0;

    struct nodo *cabeza;

    struct nodo *ultimo;

   

    cabeza=crear_nodo();

    cabeza-> ps=NULL;

    ultimo=cabeza;

    while(opcion!=9)

    {

        printf("\n***Menu Lista Simple***\n");

        printf("\n1_Intersar elemento a la lista.");

        printf("\n2_Eliminar elemento de la lista.");

        printf("\n3_Mostrar elementos de la lista.");

        printf("\n9_Salir\n");

        printf("\nElija una opcion: ");

        scanf("%d",&opcion);

        switch(opcion)

        {

            case 1:

                {

                    ultimo=insertar(ultimo);break;

                }

            case 2:

                {

                    ultimo=eliminar(cabeza);break;

                }

            case 3:

                {

                    mostrar_lista(cabeza);break;

                }

            default: break;

        }

    }

    free(cabeza);

    free(ultimo);

}

_______________________________________________

Lista de correo Cconclase Cconclase@listas.conclase.net

http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net

Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ