Hola, buen día para todos. -
Como me pareció tener claro listas simplemente enlazada http://foro.elhacker.net/programacion_cc/borrar_nodo_en_lista_simplemente_enlazadac-t455556.0.html me metí con lista doblemente enlazada y tengo una parte que no puedo solucionar, me parece que la función crear para el primer nodo funciona, pero cuando agrego 2,3,4 no puede el anterior apuntar a NULL, por más que practique no me sale, por momento parece en mi mente que es una bobada pero cuando lo llevo a la práctica no me resulta. -
Si le es posible desearía que me digan si la función agregar es correcta. -
Un abrazo. -
Como me pareció tener claro listas simplemente enlazada http://foro.elhacker.net/programacion_cc/borrar_nodo_en_lista_simplemente_enlazadac-t455556.0.html me metí con lista doblemente enlazada y tengo una parte que no puedo solucionar, me parece que la función crear para el primer nodo funciona, pero cuando agrego 2,3,4 no puede el anterior apuntar a NULL, por más que practique no me sale, por momento parece en mi mente que es una bobada pero cuando lo llevo a la práctica no me resulta. -
Si le es posible desearía que me digan si la función agregar es correcta. -
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
struct nodo{
int dato;
struct nodo *anterior, *siguiente;
};
struct lista{
struct nodo *primero, *ultimo;
int elementos;
};
void menu( void );
void limpiar( void );
struct lista *agregar( struct lista *L );
struct nodo *crear( int dato );
int main( void ){
menu();
return 0;
}
void menu( void ){
struct lista *Lista = NULL;
Lista->elementos=0;
int opc, ok, ch;
do{
do{
limpiar();
printf( "\n ========== Menu Principal ==========\n" );
if( Lista != NULL)
printf( "\n Total de datos.....:%d\n", Lista->elementos );
printf(" \n 1 - Agregar\n 2 - buscar\n 3 - Ordenar " );
printf(" \n 4 - Total\n 5 - Finalizar\n\n Ingrese Opcion....: " );
ok = scanf( "%d", &opc ) == 1 && opc > 0 && opc <= 5;
while ((ch = getchar()) != EOF && ch != '\n');
}while( !ok );
switch ( opc ){
case 1: Lista = agregar( Lista );
break;
case 2: //Lista = buscar( Lista );
break;
case 3: //ordenar( Lista );
break;
case 4: //mostrar( Lista );
break;
case 5:;
free( Lista );
break;
}
}while( opc != 5 );
}
void limpiar( void ){
system("cls||clear");
}
struct lista *agregar( struct lista *L ){
int ok, ch, dto;
do{
limpiar();
printf( "\n Ingrese dato (mayor a 0 y menor a %d)....: ", INT_MAX );
ok = scanf( "%d", &dto ) == 1 && dto >0 && dto <= INT_MAX;
while ((ch = getchar()) != EOF && ch != '\n');
}while( !ok );
if( L != NULL ){
struct nodo *e = crear( dto );
L->ultimo->siguiente = e;
L->ultimo = e;
L->elementos++;
return L;
}else{
struct nodo *e = crear( dto );
struct lista *l = calloc( sizeof( struct lista ), 1 );
l->primero = e;
l->ultimo = e;
l->elementos = 1;
return l;
}
return L;
}
struct nodo *crear( int dato ){
struct nodo *e = calloc( sizeof( struct nodo), 1 );
e->dato = dato;
e->siguiente = NULL;
e->anterior = NULL;
return e;
}
Un abrazo. -