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
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