¿Cuál es la diferencia entre node * next y node * next?

Ciertamente es una buena pregunta y estoy bastante seguro de que muchas personas tienen dudas al respecto … Entonces, descubramos qué son …

Primero, ¿qué es una lista vinculada?

En informática, una lista vinculada es una colección lineal de elementos de datos, llamados nodos, que apuntan al siguiente nodo mediante un puntero. Es una estructura de datos lineal que consiste en un grupo de nodos que juntos representan una secuencia.

Al declarar una lista vinculada, a menudo te encuentras tanto con el nodo * siguiente como con el nodo * siguiente y creo que tú también los encontraste en ese momento …

Entonces, ¿cuál es el nodo * siguiente?

Teniendo en cuenta el código que figura a continuación:

Nodo de estructura {

datos int;

struct Node * next;

};

“struct Node * next” es una variable de puntero (valor indefinido) del tipo de datos “Node” .

La idea es que su lista consta de n ocurrencias de la estructura que llamó “Nodo”. Necesita un puntero al PRIMERO de ellos ya que este puntero le indica la ubicación de la memoria de esta primera estructura (generalmente solicita el espacio para esto manualmente con malloc). La estructura de este bloque de memoria está definida por su estructura “Nodo”. Le dice que primero hay algunos bytes para el int (sizeof int le dice cuánto exactamente) y luego hay algunos bytes para una dirección (este es su puntero “siguiente”). En el último elemento de su lista vinculada, generalmente usa nulo como valor para el siguiente. De esta manera, puede verificar si su elemento activo es el último. Para agregar un elemento a su lista, debe asignarle manualmente la memoria y cambiar el siguiente puntero del último elemento a la ubicación de memoria que malloc proporcionó. (Y no olvide establecer el siguiente puntero del elemento que acaba de crear como nulo).

De esta manera funciona una lista vinculada. ¡Espero que esto ayude un poco!

Entonces, ¿cuál es el nodo * siguiente?

Teniendo en cuenta el código que figura a continuación:

typedef struct node

{

datos int;

nodo * siguiente;

};

“Nodo * siguiente” le indicará que tiene una variable de puntero para almacenar la dirección de un nuevo nodo siguiente que tenga el mismo tipo de datos.

La idea detrás de esto es que tendrá que recorrer una lista vinculada de la forma n->next->next->next... y así sucesivamente. Por lo tanto, el next debe apuntar a otro node , de lo contrario no podrá ver el siguiente int después de eso.

Puede ver los node como cuadros pequeños que contienen un int (o cualquier otro dato) y una referencia al siguiente cuadro pequeño. Si apunta directamente a los datos, no podrá obtener el cuadro después de eso (¡son solo datos tontos!), ¡Debe apuntar a los cuadros ( node s)!

Aquí hay una imagen que podría ayudar a ver a qué me refiero.

Para concluir…

Ambas declaraciones traerán el mismo resultado ya que son casi una misma. Las diferencias menores que existen entre ellos se explican anteriormente.

Espero que tengas claras tus dudas ahora …

¡¡¡Disfruta aprendiendo!!!

nodo * siguiente

Simplemente declararlo como Node* no lo hace apuntar a ningún lado, solo le dice al compilador que es un puntero a algún Node (o ningún Node ). Tiene que haber un código real que establezca el next puntero para que apunte al siguiente Node.

nodo * siguiente

node *next asegura que tiene una variable próxima que es un puntero al node .

Gracias por A2A!

Editar

Como se indica a continuación, es solo un estilo para escribir el código.

¡No hay mucha diferencia en ambas sintaxis!

Pero, por favor proporcione la razón detrás si es posible 🙂

Estoy esperando la respuesta ya que no lo sé. ¡Gracias!

Y, una cosa más, la respuesta proporcionada aquí por mí no parece ser ciento por ciento correcta.

Por lo tanto, no es necesario que lo voten. Estaré muy agradecido entonces 🙂

Ambos son el mismo compañero.

El nodo de declaración * siguiente fue utilizado por Bjarne Stroustrup, el diseñador e implementador original de C ++.

int * p e int * p siempre funciona igual.

Ambos funcionan absolutamente similares. Es una convención general utilizada por los programadores.

Todavía no he encontrado ninguna declaración del primer tipo, es decir, nodo * siguiente. Más bien, dicha declaración se usa al devolver un puntero del tipo de una estructura de datos. Ejemplo:

struct node * deleteFirst () {
// guardar referencia al primer enlace
struct node * tempLink = head;
// marca al lado del primer enlace como primero
cabeza = cabeza-> siguiente;
// devuelve el enlace eliminado
return tempLink;
}

Aquí puede ver que la función devuelve el puntero del nodo de tipo.

En el contexto de la última declaración, nodo * siguiente, se está declarando un puntero del nodo de tipo que puede usarse para referirse a estructuras de datos de ese tipo. Ejemplo:

struct node * ptr = head;
printf (“\ n [“);
//Comienza desde el principio
while (ptr! = NULL) {
printf (“(% d,% d)”, ptr-> clave, ptr-> datos);
ptr = ptr-> siguiente;
}
printf (“]”);

No hay diferencia en ambas declaraciones como tales.

Si hay un problema adicional, cuide compartir el enlace / referencia del problema.

Sintácticamente? Absolutamente ninguno.

Puede escribir Node * next o Node* next o Node *next . Simplemente agregar más espacios en blanco alrededor del * no cambia nada. Los analizadores C son mejores que eso.

Ninguna. Es solo el estilo de escritura de un programador, ya sea nodo * siguiente o nodo * siguiente . Técnicamente hablando, el nodo * siguiente es apropiado ya que el asterisco debería indicar que es un puntero de tipo nodo , la razón por la que debería estar con el nodo y no con el siguiente.

No hay diferencia, pero debe evitar el node* next debido a una mala captura en el idioma:

nodo * siguiente, anterior;

… crea una variable que es un puntero de nodo (siguiente) y una que es solo nodo (anterior). La estrella no es parte del tipo, solo afecta el identificador después.

Si en cambio escribes:

nodo * siguiente, anterior;

… el error es un poco más obvio. Debería haber sido:

nodo * siguiente, * anterior;

Ambos son iguales, pero para crear un código limpio, puede seguir cualquiera de ellos que defina su estilo de codificación. El compilador realmente necesita un “” (espacio) entre los dos pares. Entonces es correcto de cualquier manera.

Respuesta corta.

No hay diferencia real. Solo algunos libros desordenados y algunas malas prácticas de codificación.

Siempre debes intentar usar este.

Nodo * siguiente

Tiene un significado más claro, dice, el siguiente es un puntero que apunta a datos de tipo Nodo, que de hecho es muy cierto.

Considerando que

Nodo * siguiente

Este dice, el siguiente es un puntero de nodo. Esto también tiene el mismo significado, pero el anterior es una mejor práctica para usar.

nodo * siguiente:

Si declara el nodo * siguiente, el valor de siguiente no está definido. Este no es el uso completo de todos modos. Simplemente dice que es una variable de tipo nodo * pero no tendrá un puntero para apuntar a ningún nodo. Podemos usar el nodo * como tipo de retorno de una función que devuelve cualquier nodo.

nodo * siguiente:

Esta declaración le indicará que tiene la variable de puntero para almacenar la dirección del nodo nuevo o siguiente que tiene el mismo tipo de fecha.

Básicamente son lo mismo. Solo diferentes formas de declarar un puntero al siguiente nodo.

More Interesting

Cómo consolidar dos sitios de blogs en un solo sitio

¿Cómo se convirtió Javascript en el más popular en el desarrollo web, mientras que los programadores a menudo dicen que es un mal lenguaje?

¿Cómo podemos crear backlinks de calidad para mi sitio web?

¿Por qué los navegadores permiten ejecutar JavaScript entre dominios pero no XMLHttpRequests?

¿Cuáles son las mejores prácticas y herramientas para la colaboración de equipos frontend y backend en una startup web?

¿Cuál es el marco PHP que mejor se adapta a AngularJS?

En PHP / CodeIgniter, ¿cuál es la mejor manera de verificar si los datos de publicación HTML son lo que espera (si el usuario ha manipulado los valores HTML)?

¿Cómo es MVC diferente de PHP normal? ¿Por qué debería aprenderlo?

¿Puedo ganarme la vida trabajando como desarrollador independiente?

¿Cuál es la mejor empresa de desarrollo web en Bangalore?

Para los nuevos clientes, ¿tiene una plantilla de cuestionario estándar que utiliza para extraer información relevante antes de lanzar un nuevo proyecto de desarrollo de sitios web?

¿Cuál es el mejor marco web basado en su rendimiento y seguridad?

Si Jimmy Wales, cofundador de Wikipedia, cambiara su modelo de negocio de una organización sin fines de lucro a una con fines de lucro y respaldada con anuncios pagados, como los anuncios discretos en los resultados del motor de búsqueda de Google, ¿qué valdría Wikipedia?

¿Por qué Google decidió utilizar el desplazamiento personalizado en su nuevo sitio web de bandeja de entrada? ¿Añade una mejor experiencia para el usuario o ayuda a Google a tener más control sobre la información presentada al usuario?

En 2017, ¿debo aprender el método JavaScript o jQuery para hacer una solicitud AJAX?