15.02.2014 Views

Cap. 3 Administración de la memoria en C. - Inicio

Cap. 3 Administración de la memoria en C. - Inicio

Cap. 3 Administración de la memoria en C. - Inicio

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.

16 Estructuras <strong>de</strong> Datos y Algoritmos<br />

Los nodos que no ti<strong>en</strong><strong>en</strong> <strong>de</strong>sc<strong>en</strong>di<strong>en</strong>tes <strong>de</strong>b<strong>en</strong> t<strong>en</strong>er valores nulos <strong>en</strong> los punteros left y right.<br />

Se <strong>de</strong>sea diseñar una función que <strong>en</strong>cu<strong>en</strong>tre el nodo con mayor valor.<br />

No es razonable pasar como argum<strong>en</strong>to el árbol completo a <strong>la</strong> función, por el espacio requerido<br />

<strong>en</strong> el stack, y porque sería necesario a<strong>de</strong>más copiar <strong>la</strong> estructura completa. Entonces po<strong>de</strong>mos<br />

pasar un puntero a un nodo como argum<strong>en</strong>to, esto sólo requiere crear el espacio y copiar el valor<br />

<strong>de</strong> un puntero (normalm<strong>en</strong>te el tamaño ocupado por un <strong>en</strong>tero). El retorno <strong>de</strong> <strong>la</strong> función, será un<br />

puntero al nodo que t<strong>en</strong>ga el mayor valor.<br />

pnodo busca_max(pnodo T)<br />

{ if (T != NULL)<br />

while (T->right != NULL) T = T->right; /* Iterativo. Siempre por <strong>la</strong> <strong>de</strong>recha */<br />

return(T);<br />

}<br />

La función consi<strong>de</strong>ra que se <strong>la</strong> podría invocar con un argum<strong>en</strong>to apuntando a un árbol vacío, <strong>en</strong><br />

ese caso se <strong>de</strong>ci<strong>de</strong> retornar un puntero con valor nulo, que indica un árbol (o subárbol vacío).<br />

T<strong>en</strong>i<strong>en</strong>do <strong>en</strong> cu<strong>en</strong>ta <strong>la</strong> propiedad <strong>de</strong>l árbol binario, basta <strong>de</strong>sc<strong>en</strong><strong>de</strong>r por <strong>la</strong> vía <strong>de</strong>recha, hasta<br />

<strong>en</strong>contrar un nodo sin <strong>de</strong>sc<strong>en</strong>di<strong>en</strong>te u hoja.<br />

Un ejemplo <strong>de</strong> uso:<br />

pn = busca_max(raiz);<br />

En el caso <strong>de</strong>l ejemplo, retornaría un puntero al nodo con valor 8.<br />

Otro ejemplo <strong>de</strong> uso:<br />

pn = busca_max(raiz->left);<br />

Retornaría un puntero al nodo con valor 1.<br />

Ejemplo 3.10 Manipu<strong>la</strong>ción <strong>de</strong> strings.<br />

Veremos <strong>la</strong> forma <strong>de</strong> tratar funciones que manipul<strong>en</strong> arreglos o strings.<br />

Antes <strong>de</strong> <strong>de</strong>sarrol<strong>la</strong>r el ejemplo repasaremos <strong>la</strong> estructura <strong>de</strong> datos asociada a un string.<br />

Definición <strong>de</strong> string.<br />

a) Arreglo <strong>de</strong> caracteres.<br />

La sigui<strong>en</strong>te <strong>de</strong>finición reserva espacio para un string como un arreglo <strong>de</strong> caracteres.<br />

La <strong>de</strong>finición <strong>de</strong> un string como arreglo <strong>de</strong> caracteres, <strong>de</strong>be incluir un espacio para el carácter<br />

fin <strong>de</strong> string (el carácter NULL, con valor cero). Quizás es mejor <strong>de</strong>finir el terminador <strong>de</strong> string<br />

como null (o eos: <strong>en</strong>d of string), para evitar confusiones con el valor <strong>de</strong> un puntero nulo.<br />

Profesor Leopoldo Silva Bijit 20-01-2010

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

Saved successfully!

Ooh no, something went wrong!