09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

17.1. Estructuras recursivas lineales: las listas <strong>en</strong>lazadas 355<br />

procedure AnnadirPrimero(var lista: tLista; nuevoDato: tElem);<br />

{Efecto: se a~nade nuevoDato al comi<strong>en</strong>zo de lista}<br />

var<br />

listaAux: tLista;<br />

begin<br />

listaAux:= lista;<br />

New(lista);<br />

lista^.cont<strong>en</strong>ido:= nuevoDato;<br />

lista^.sigui<strong>en</strong>te:= listaAux<br />

<strong>en</strong>d; {AnnadirPrimero}<br />

Obsérvese que este procedimi<strong>en</strong>to sirve tanto para cuando lista es vacía como<br />

para cuando no lo es.<br />

17.1.3 Eliminación de elem<strong>en</strong>tos<br />

A continuación se pres<strong>en</strong>ta el procedimi<strong>en</strong>to Eliminar que sirve para eliminar<br />

el primer elem<strong>en</strong>to de una lista no vacía. La idea es bastante simple: sólo hay<br />

que actualizar el puntero para que señale al sigui<strong>en</strong>te elem<strong>en</strong>to de la lista (si<br />

existe).<br />

procedure EliminarPrimero(var lista: tLista);<br />

{PreC.: la lista no está vacía}<br />

{Efecto: el primer nodo ha sido eliminado}<br />

var<br />

listaAux: tLista;<br />

begin<br />

listaAux:= lista;<br />

lista:= lista^.sigui<strong>en</strong>te;<br />

Dispose(listaAux)<br />

<strong>en</strong>d; {EliminarPrimero}<br />

17.1.4 Algunas funciones recursivas<br />

La longitud de una lista<br />

La naturaleza recursiva de la definición dada del tipo lista permite definir<br />

fácilm<strong>en</strong>te funciones que trabaj<strong>en</strong> usando un proceso recursivo. Por ejemplo, la<br />

función Longitud de una lista se puede definir recursivam<strong>en</strong>te (es evid<strong>en</strong>te que<br />

el caso base es Longitud(nil) = 0) sigui<strong>en</strong>do la línea del sigui<strong>en</strong>te ejemplo:<br />

Longitud ([a,b,c]) ❀ 1 + Longitud ([b,c])<br />

❀ 1 + (1 + Longitud([c]))<br />

❀ 1 + (1 + (1 + Longitud(nil)))<br />

❀ 1 + (1 + (1 + 0)) ❀ 3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!