Lo más importante es NO hacer una identificación de colección vacía con NULL. Que una colección sea vacía significa lo que ahí dice, que no tenga elementos.
Algunos ejemplos:
- Una pila no acotada se podría implementar con nodos enlazados y la pila vacía podría ser NULL.
-
En general, una secuencia de nodos encadenados, ordenada o no, con la
cual se puede implementar por ejemplo conjunto, mapping o lista con posiciones podría ser
NULL si es vacía.
- En un árbol genérico (no es completo, no es acotado) es probable que convenga que el valor de la variable sea NULL.
Podría no serlo si además de mantener los nodos interesa algún otro dato, como por ejemplo la cantidad de nodos de todo el árbol (pero no de los subárboles), o un puntero a algún nodo especial distinto de la raíz. En este caso podría convenir que la variable de tipo árbol sea (un puntero a) una cabecera con un puntero a la raíz y el o los otros campos de interés. Al crear el árbol se podría crear la cabecera y por lo tanto nunca ser NULL.
Pero, repito, lo estándar es asignar NULL al crear el árbol.
- En una estructura acotada como un heap conviene pedir el arreglo de tamaño adecuado al crear el heap. Asignarle NULL inicialmente y esperar a la primera inserción para crear el arreglo con el objetivo de no ocupar memoria de manera innecesaria no parece de mucho provecho.
- Incluso en estructuras cuyo tamaño no es acotado puede convenir que no se asigne NULL al crearla. Por ejemplo, en cadena sugeríamos que se implementara con una cabecera con punteros al inicio y al final y que esa cabecera se creara al crear la cadena.
Esto lo vimos extensamente en clase pero es probable que haya una clase de consulta y podamos volver a verlo ahí.