Invierte en tu educación con el precio especial

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12d

01h

29m

27s

3

Pasos para crear un nodo en C (listas enlazadas)

Ernán Alexander
ernanvr
24851

Seguramente más de alguno quedará estancado en alguno de los temas de este curso, especialmente lo que estamos iniciándonos en el mundo de la tecnología. Por ello realicé un pequeño tutorial sobre cómo crear un nodo, para facilitar la comprensión del tema, ya que personalmente se me dificultó muchísimo.
Here we go:

Pasos para crear un nodo.
a) Crear la estructura Nodo y el tipo NODO.
Hay una diferencia entre typedef y struct, el primero se trata de copiar el tipo de variable, algo así como el copiar formato de office. Ejemplo:

typedef int A;A a;

Mi forma de interpretarlo es que le enviamos la instrucción al procesador que copie el formato de la variable A, y lo pegue en las nuevas variables que creamos seguidas de la A. Prácticamente la variable A se vuelve un tipo de variable.
En cambio struct creamos un árbol de variables, y a eso se le debe el nombre struct, que significa “estructura” en español. El objetivo de la utilización de esta palabra reservada es darle más orden a las variables de nuestro programa, ya que permite agrupar las que estan relacionadas, como en una ficha cliente, nombre y dirección, es conveniente acceder a ellas mediante una estructura llamada cliente. Ejemplo:

Struct Cliente {
	char nombre[100];
	char direccion[100];
};

Volviendo a los Nodos, junto con la estructura creamos el typedef, pero con una característica única: la autoreferencia. Esto se logra creando un puntero del tipo estructura dentro del nodo, que permitirá enlazar otros nodos. Ya sé, parece que dará algún error, y esto es parecido al efecto de poner dos espejos uno frente del otro, pero así es el proceso, hazlo sin miedo. Ejemplo:

typedef struct Node{
	int var_1;
	char var_2[5];
	struct Node* next;
} NODE;

b) Crear la función que dará existencia al nodo.
Debido a que se recurrirá en varias ocasiones a una serie de pasos para crear los nodos, es eficiente crear una función para realizar la actividad y así ahorrar unas líneas de código.
Los pasos que deben guardarse en una función son:

  1. Declarar la función como tipo puntero NODO.
  2. Creación de la variable tipo NODO, declarado anteriormente.
  3. Reservar memoria para la variable.
  4. Apuntar el puntero next a NULL por defecto.
  5. Asignarle los datos recibidos como argumentos de la función a las variables correspondientes (prácticamente registrar la data del nodo).
  6. Retornar el puntero tipo NODO.

Ejemplo:

NODE* createNode(int number){
	NODE* newNode;
	newNode= malloc(sizeof(NODE));
	newNode->next = NULL;
	newNode->number = number;

	return newNode;

c) Crear la cabecera y resto de componentes de la lista enlazada
Antes de crear un nodo, debemos saber si será una cabecera, cola o un nodo intermedio. Si queremos crear una cabecera declaramos una nueva variable puntero tipo NODO, y le asignamos un nodo con la función declarada en paso anterior. Si queremos crear un nodo cola o intermedio, recorremos la lista hasta llegar al nodo cola, o al nodo que queremos anexar uno nuevo, y asignamos un nuevo nodo a su variable next, de esa manera hacemos que apunten al nuevo nodo que creamos.
Ejemplo:

NODE * start = NULL, * current;if(start= NULL)
			{
				start = createNode(number);

			} else 
			{
				current = start;while(current->next)
				{
					current = current->next;
				};
				current->next = createNode(number);

Punto importante: para recorrer los nodos, siempre debe hacerse desde la cabecera, y se logra con funciones loop como while.
Este ejemplo, start es la cabecera, y current es la herramienta que nos sirve para recorrer la cadena de los nodos, gracias a la variable del struct next.

Escribe tu comentario
+ 2
1
42Puntos
2 años

Intento usar el Nodo* retornado por la función createNode() pero me sale error Segmentation Fault terminando con el programa. Creo que podría haber probema al intentar retornar una referencia hacia una variable local de la funcion, pero he visto que siempre lo hacen de esa forma a la funcion “createNode()” por lo que no entiendo por qué no me funciona a mi. Desde ya gracias por cualquier ayuda

1
15144Puntos
4 años

excelente aporte!

Lo único para aclarar que en esta parte:

typedef struct Nodo { int var_1; char var_2[5]; struct Node * next; } NODO

la autoreferencia debe ser el mismo nombre del struct , para no confundir ambos deberían ser “node”.

typedef struct Node { int var_1; char var_2[5]; struct Node * next; } NODO

Muhas gracias!

2
24851Puntos
4 años

Corregido!!, gracias por la observación.