<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><font face="'courier new', monospace">un ejemplito de uso de punteros. Supongamos que quieres armar una estructura de datos dinámica, como ser una lista enlazada, doblemente enlazada, o un árbol, un grafo... en fin. Cada nodo está relacionado con otro de alguna manera, según que estructura sea. Una lista enlazada (simple) se vé así:</font><div>


<font face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">          ┌─────┐</font></div>
<div><font face="'courier new', monospace">          │nodo0│</font></div><div><font class="Apple-style-span" face="'courier new', monospace">          └──┬──┘</font></div>
<div><div><font class="Apple-style-span" face="'courier new', monospace">          ┌──┴──┐</font></div>
<div><div><font face="'courier new', monospace">          │nodo1│</font></div><div><font class="Apple-style-span" face="'courier new', monospace">          └──┬──┘</font></div>
</div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">          ┌──┴──┐</font></div>
<div><div><font face="'courier new', monospace">          │nodo2│</font></div><div><font class="Apple-style-span" face="'courier new', monospace">          └──┬──┘</font></div>
</div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">          ┌──┴──┐</font></div>
<div><div><font face="'courier new', monospace">          │nodo3│</font></div><div><font class="Apple-style-span" face="'courier new', monospace">          └──┬──┘</font></div>
</div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">          ┌──┴──┐</font></div>
<div><div><font face="'courier new', monospace">          │nodo4│</font></div><div><font class="Apple-style-span" face="'courier new', monospace">          └──┬──┘</font></div>
</div></div><div><font class="Apple-style-span" face="'courier new', monospace">             │<br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">            NULL</font></div>


<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">bueno, el punto es que la linea que une un nodo con otro se implementa usando un puntero autorreferencial. Como es eso? Cuando se define la estructura, se agrega un puntero del mismo tipo que la estructura que se está definiendo. Queda así:</font></div>


<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">struct NodoEjemplo{</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">         /*... */</font></div></blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

<div><font class="Apple-style-span" face="'courier new', monospace">    NodoEjemplo  *siguiente;</font></div></blockquote><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">

</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><font class="Apple-style-span" face="'courier new', monospace">};</font></div></blockquote>
<div>
<font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">entonces se arma así: </font></div><div><font class="Apple-style-span" face="'courier new', monospace">    NodoEjemplo *temp, *raíz = new NodoEjemplo; </font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">   //insertamos primer elemento</font></div><div><font class="Apple-style-span" face="'courier new', monospace">   raiz->siguiente = (temp = new NodoEjemplo);</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">   temp->siguiente = NULL; //indicador de fin de lista...</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>

</font></div><div><font class="Apple-style-span" face="'courier new', monospace">   //Esta es la inserción de nuevos elementos... </font></div><div><font class="Apple-style-span" face="'courier new', monospace">   //se repite para cada elemento que se agregue. </font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">   //Es lo mismo para insertar el primer elemento </font></div><div><font class="Apple-style-span" face="'courier new', monospace">   //solo que si la raíz fuera nula, entonces </font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">   //insertamos sobre la raiz, sino sobre el último nodo...</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>

</font></div><div><font class="Apple-style-span" face="'courier new', monospace">   temp->siguiente = (temp new NodoEjemplo);</font></div></div><div><font class="Apple-style-span" face="'courier new', monospace">   temp->siguiente = NULL; //indicador de fin de lista...</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">Para recorrer la lista (siempre hacia adelante, porque es una lista enlazada simple) se usa un bucle y se evalúa el puntero al siguiente elemento:</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">    if(raiz){   //en el código previo no llegamos a poner en nulo este puntero </font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">        for(NodoEjemplo *t = raiz; t->siguiente; t = t->siguiente);</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    }</font></div>

<font class="Apple-style-span" face="'courier new', monospace">   </font><div><font class="Apple-style-span" face="'courier new', monospace">Las operaciones de inserción, eliminación, ordenamiento e iteración, se encapsulan en sus respectivas funciones. Una vez hecho, trabajar con estas estructuras es muy cómodo y la tienen muchas ventajas sobre un array pero siempre depende para qué se quieran usar. La asignación es dinámica y no hay mucha diferencia en velocidad de ejecución para los recorridos, tampoco impacta mucho en memoria cuando se manejan nodos grandes. Hay muuuucha bibliografía al respecto. Respecto al código QT que incuiste... al programador se le ocurrió hacer una asignación dinámica, pero se podía hacer con una variable directa... Espero te sirva!</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div>