Título: Borrar nodos pasados por parametro valor/referencia Publicado por: Beginner Web en 25 Diciembre 2018, 21:41 pm Buenas chicos, me surgio una duda, como debo pasar un nodo dentro de un procedimiento si se da el caso de que quiero borrarlo ahi? por valor o referencia? A mi se me hace que por valor/referencia da lo mismo ustedes que dicen?
Código
Título: Re: Borrar nodos pasados por parametro valor/referencia Publicado por: MAFUS en 26 Diciembre 2018, 01:07 am Te paso una pila básica codificada en C. Espero que te sirva.
Código
Título: Re: Borrar nodos pasados por parametro valor/referencia Publicado por: Beginner Web en 26 Diciembre 2018, 20:00 pm La verdad lo dejé por valor porque si lo elimina, hice las pruebas correspondientes con delete(puntero), tenia algo de duda porque cuando liberamos/borramos un binary tree search el procedimiento tiene al arbol por referencia. ;-)
Código
Título: Re: Borrar nodos pasados por parametro valor/referencia Publicado por: K-YreX en 27 Diciembre 2018, 09:37 am No estoy del todo seguro pero si se trata de punteros creo que no es necesario pasarlo por referencia. Esto es porque un puntero contiene una dirección de memoria, no un dato como tal (variable u objeto).
Si se trata de una variable/objeto hay que pasarlo por referencia porque sino se crea una copia al pasarlo por valor y lo que modificamos es la copia, no el original. Pero al tratarse de punteros, estamos pasando una dirección de memoria, entonces aunque se cree una copia del parámetro y se trabaje sobre la copia, la copia es una dirección de memoria (la misma que el puntero original y por esto es que también funciona). Si se quiere reservar memoria sobre un puntero entonces sí hay que pasarlo por referencia. Por otra parte el tema de que para un BST se pase por referencia es porque así evitas que la función copie todo el BST por valor. Muchas veces se aprovecha el paso por referencia cuando se trabaja con objetos de gran tamaño para evitar que se haga una copia y así ahorrar espacio en memoria. Por eso hay funciones que reciben objetos constantes por referencia, que parece una tontería ya que al ser constante no se puede modificar pero se hace sólo para evitar que la función ocupe el doble de memoria haciendo una copia del objeto. Para objetos pequeños o variables sencillas es indiferente ya que el gasto de memoria es pequeño pero también podría hacerse. Lo más común es hacer esto con objetos que son muy grandes o que son dinámicos por si llegan a ser muy grandes. Título: Re: Borrar nodos pasados por parametro valor/referencia Publicado por: Beginner Web en 27 Diciembre 2018, 11:13 am No estoy del todo seguro pero si se trata de punteros creo que no es necesario pasarlo por referencia. Esto es porque un puntero contiene una dirección de memoria, no un dato como tal (variable u objeto). Si se trata de una variable/objeto hay que pasarlo por referencia porque sino se crea una copia al pasarlo por valor y lo que modificamos es la copia, no el original. Pero al tratarse de punteros, estamos pasando una dirección de memoria, entonces aunque se cree una copia del parámetro y se trabaje sobre la copia, la copia es una dirección de memoria (la misma que el puntero original y por esto es que también funciona). Si se quiere reservar memoria sobre un puntero entonces sí hay que pasarlo por referencia. Por otra parte el tema de que para un BST se pase por referencia es porque así evitas que la función copie todo el BST por valor. Muchas veces se aprovecha el paso por referencia cuando se trabaja con objetos de gran tamaño para evitar que se haga una copia y así ahorrar espacio en memoria. Por eso hay funciones que reciben objetos constantes por referencia, que parece una tontería ya que al ser constante no se puede modificar pero se hace sólo para evitar que la función ocupe el doble de memoria haciendo una copia del objeto. Para objetos pequeños o variables sencillas es indiferente ya que el gasto de memoria es pequeño pero también podría hacerse. Lo más común es hacer esto con objetos que son muy grandes o que son dinámicos por si llegan a ser muy grandes. Pero son nodos, no punteros solos Título: Re: Borrar nodos pasados por parametro valor/referencia Publicado por: K-YreX en 27 Diciembre 2018, 12:27 pm Código El parámetro que mandas es <pnodo> y <pnodo> es un puntero a <tnodo>. Al final, lo que estás mandando es un puntero, pero en vez de ser un puntero a una variable es un puntero a un objeto pero no deja de ser un puntero. Si tus funciones en vez de recibir un <pnodo> (puntero a <tnodo>) como parámetro, recibiesen un <tnodo> entonces si tendrías que pasarlo por referencia si lo quieres modificar. Título: Re: Borrar nodos pasados por parametro valor/referencia Publicado por: Beginner Web en 27 Diciembre 2018, 18:16 pm Haaaaaaaaaaa!!! mas claro que el agua imposible, graciasss :laugh:
|