Ejemplo de listas enlazadas en C++

Publicado por Laura
hace 10 años

<p>Les muestro un simple ejemplo sobre listas enlazadas en C++. En este código definimos una estructura Nodo que contendrá un valor y un puntero hacia otro nodo. Y una clase llamada Lista que nos permitirá agregar un nodo nuevo y recorrer los ya existentes.</p>

<p>La mayor parte del código es muy sencillo de entender. Así que solo explicaré aquí brevemente el mecanismo del método "agregar".</p>

<p>Cada vez que se llama al método agregar habrá dos caminos posibles. Por un lado podemos contar con una lista vacía, es decir, esta será la primera vez que agreguemos un nodo, será <strong>el primer nodo</strong>. En el segundo caso la lista ya contendrá otros nodos.</p>

<p>La variable <strong>_primero</strong> es un puntero cuyo valor inicial es NULL, es decir, al crearse el objeto Lista, la variable <strong>_primero</strong> no estará apuntando a ningún nodo.</p>

<p>Cuando agreguemos un nodo verificaremos si <strong>_primero</strong> contiene como valor <strong>NULL</strong>. De ser así afirmamos que es el primer nodo que estamos agregando, así que procedemos a asignarle la dirección de este nuevo nodo a la variable <strong>_primero</strong>. Y hacemos que este nuevo nodo apunte a <strong>NULL</strong>.</p>

<p>Cuando agreguemos un segundo nodo, veremos que _primero ya está apuntando al nodo que hemos agregado antes. Así que haremos que ese nodo apunte al nuevo nodo que estamos agregando. Y este último nodo apuntará a <strong>NULL</strong>.</p>

<p>Lo importante al trabajar con listas enlazadas es entender perfectamente el siguiente funcionamiento:</p>

<p style="text-align:center;"><img alt="" src="http://s14.postimg.org/f74fb9wdt/dffsdfasdfds.png" /></p>

<p>Aquí les dejo el código.</p>

<pre class="prettyprint">

include <iostream>

using namespace std;

/**

  • Estructura Nodo / struct Nodo { int valor; Nodo siguiente; };

/**

  • Clase Lista / class Lista { private: Nodo _primero; public: Lista(); ~Lista(); void agregar( int ); Nodo * primero(); };

/**

  • Constructor */ Lista::Lista() { _primero = NULL; }

/**

  • Destructor / Lista::~Lista() { Nodo nodo_actual = _primero; while( nodo_actual != NULL ) { Nodo *siguiente = nodo_actual->siguiente; delete nodo_actual; nodo_actual = siguiente; } }

/**

  • Método Agregar
  • Agrega un nodo a la lista / void Lista::agregar( int nuevo_valor ) { Nodo nuevo_nodo = new Nodo; nuevo_nodo->valor = nuevo_valor; nuevo_nodo->siguiente = NULL; if( _primero == NULL ) { _primero = nuevo_nodo; } else { Nodo *nodo_actual = _primero; while( nodo_actual->siguiente != NULL ) nodo_actual = nodo_actual->siguiente; nodo_actual->siguiente = nuevo_nodo; } }

/**

  • Método Primero
  • retorna el primer nodo de la lista / Nodo Lista::primero() { return _primero; }

/**

  • Función principal */ int main() { Lista lista;

    // se agregan algunos valores a la lista lista.agregar( 17 ); lista.agregar( 21 ); lista.agregar( 12 );

    // se recorre la lista y se muestran los valores agregados Nodo * it = lista.primero(); while( it != NULL ) { cout << it->valor << endl; it = it->siguiente; } return 0; }</pre>

<p> </p>

listas enlazadas c++
Respuesta de Cristian Olaz
hace 10 años

Buen aporte Laura! Saludos.