Hilo
lista dobleente enlazada (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
Re: lista dobleente enlazada (Salvador Pozo) 2017-05-19 08:17:48
El pasado 2017-05-18 22:36:17, hernan diaz escribió:
hd> COMO ELIMINO PRIMER Y ULTIMO NODO EN UNA LISTA DOBLE???
Hola:
Aquí lo tengo explicado con gráficos, con texto y con ejemplos:
http://c.conclase.net/edd/index.php?cap=005c#5_6
Si algo no te queda claro, pregunta. Estaremos encantados de resolver cualquier duda.
Hasta pronto.
--
Salvador Pozo (Administrador)
mailto:salvador@conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net
_______________________________________________
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