Programación General > C/C++

 Función Anidada

(1/1)

AdolfoC:
Hola a todos:

Estoy preparando una pequeña aplicación que usa una lista enlazada. A la hora de crear un nuevo nodo con datos, debo usar una función que además de crear el nodo lo inserte en su sitio.

Todos los fputs/fgets y printf/scanf se solicitan en el programa principal, es decir, las funciones solo realizan las operaciones necesarias y retornan un valor para usar en el "main".

Teniendo esto en cuenta, si la función "crear_nodo" está anidada en la función "insertar_nodo", sería posible pasarle de algún modo los  parámetros necesarios a la función "crear_nodo"?

Ejemplo:

int insertar_nodo (str_nodo **cabeza)
{
   str_nodo *actual;
   str_nodo *anterior;
...
   str_nodo *elem = crear_nodo ( DE DÓNDE PUEDO RECIBIR LOS PARAMETROS?);
   
....
}

Si no quedase otro remedio realizaría las funciones separadamente, pero si fuese posible realizarlo de este modo sería estupendo.

Muchas gracias por la ayuda y saludos!!!

Jeysscarr:
deberias poder pasar un puntero de entrada y salida [ **nuevoNodo ], que mandes como parametro vacio (NULL) a la función CrearNodo junto con los valores de la esctructura, y que esta en su interior le asigne el espacio en memoria y los datos, despues que se ejecute la función crear nodo, seguiria buscar el ultimo nodo, para agregar este que acabas de crear como el que le sigue...

un ejemplo:


--- Código: C++ ---//Una estructura cualquierEstructura Persona{ int edad; char *nombre; persona *Siguiente} void insertarNodo(parametros){    //acciones     Persona Nuevo=NULL;    CrearNodo(**Nuevo, 16, "EL nombre de la persona",**cabeza,);     //en la funcion usaras Malloc.. siseof y todo lo que necesites para darle un espacio en memoria y me imagino que haras algo asi para        //buscarle la posicion en la lista         [color=#804040]Persona *ptr=*cabeza;    while(*ptr->siguiente!=NULL)        *ptr=ptr->siguiente;     //y continuas con lo tuyo[/color]} 

AdolfoC:
Jey, tu respuesta es sumamente aclaratoria, no obstante aun me queda la siguiente duda:

Los valores correspondientes al contenido de la estructura están en el "main", asignados a las variables que les corresponda.

Cómo hago para hacerle llegar estas variables al campo de parámetros de "nuevo_nodo"?  Quiero decir, le puedo pasar esos parámetros y que los "reciba" directamente del main a pesar de tratarse de una función anidada en otra?
Agradezco mucho la ayuda.

Un saludo!!!

Epa:
cual es el problema con usarlas por separado.
Que pasa si queres insertar un nodo que ya tenes creado?

Algo que podrias hacer es:

void insertar(nodo *cabeza, nodo *nuevo);
nodo* nuevonodo(tuestructura datos);

y despues llamar:

insertar(cabeza, nuevonodo(dato));

o sino crear una tercera funcion:

--- Código: C++ --- void creainserta(nodo *cabeza, tuestructura datos){   insertar(cabeza, nuevonodo(datos));}  
Saludos

AdolfoC:
Claro!!! Es genial, no se me ocurrió realizarlo de ese modo.

Muchas gracias a ambos por la ayuda!!!

Navegación

[0] Índice de Mensajes

Ir a la versión completa