Me pregunto, ¿cuál es la diferencia entre:
struct Node { int data; Node *next; };y
struct Node { int data; struct Node *next; }; ¿Por qué necesitamos la palabra clave struct en el segundo ejemplo?
Además, ¿cuál es la diferencia entre
void Foo(Node* head) { Node* cur = head; //.... }y
void Foo(struct Node* head) { struct Node* cur = head; //.... }Solo las declaraciones que incluyen struct son válidas en C. No hay diferencia en C++.
Sin embargo, puede typedef la struct en C, por lo que no tiene que escribirla cada vez.
typedef struct Node { int data; struct Node *next; // we have not finished the typedef yet } SNode; SNode* cur = head; // OK to refer the typedef hereEsta sintaxis también es válida en C++ por compatibilidad.
El nodo Struct es un nuevo tipo de datos definido por el usuario que creamos. Y a diferencia de las clases, el nuevo tipo de datos que usa estructuras es "struct strct_name", es decir; necesitas la palabra clave struct delante de struct_name. Para las clases, no necesita palabras clave delante del nuevo nombre del tipo de datos. p.ej;
class abc { abc *next; };y cuando declaras variables
abc x;en lugar de estructura
abc x;en caso de estructuras. También entiendo que por la declaración
struct node * next;estamos tratando de crear un puntero que apunte a una variable de tipo "strcut node", que en este caso se denomina puntero autorreferencial, ya que apunta a la estructura principal.