• Sábado 14 de Diciembre de 2024, 14:48

Autor Tema:  Re: Estrucutaras de datos ARBOL N-ario  (Leído 7068 veces)

azzwad

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
    • http://www.azzwad.tk
Re: Estrucutaras de datos ARBOL N-ario
« en: Sábado 15 de Noviembre de 2003, 09:06 »
0
Buenas noches, quisiera saber si alguien me pudiese ayudar, resulta que tengo que programar un arbol eneario en C y lo mas que logro sacar es un arbol binario, se supone que para hacerlo la forma correcta es usar una lista doble enlazada y arreglarla de tal forma que cumpla con las especificaciones de un arbol.

Atte. Azzwad:ayuda::ayuda:

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Estrucutaras de datos ARBOL N-ario
« Respuesta #1 en: Sábado 15 de Noviembre de 2003, 13:57 »
0
Hola. Te recomendaría que para hacer un árbol n-ario no usaras una lista, ya que es tremendamente ineficiente (excepto en búsquedas en anchura) y se desperdicia mucha memoria a no ser que el árbol esté muy bien equilibrado.

Mi consejo es que uses una estructura de nodos asociados en forma de árbol, donde en cada nodo se guarden los hijos. Una posible representación sería:

typedef struct st_nodo_t
{
   void *datos;
   struct st_nodo_t **hijos;
} nodo_t;

Así, datos sería la información que se almacena en cada nodo e hijos sería un array de punteros a los hijos. Si quieres crear un árbol 32-ario (por ejemplo) el campo hijos se inicializaría así:

nodo.hijos = (nodo_t**) malloc(sizeof(nodo_t**) * 32);

Suponiendo nodo una variable de tipo nodo_t.

Ahora sólo quedaría crear cada hijo, haciendo una reserva de memoria para cada nodo en cada una de las posiciones del array hijos. Si un nodo no tiene los 32 hijos, puedes dejar sus punteros a NULL para representarlo.

De esta forma puedes recorrer fácilmente el árbol en profundidad (en anchura, para hacerlo eficiente, hay que complicar un poco los nodos, con punteros a los hermanos). También es sencillo realizar inserciones, búsquedas, etc, todo con coste log n (si el árbol está ordenado), usando funciones recursivas.

Espero haberte servido de ayuda.

Un saludo.

azzwad

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
    • http://www.azzwad.tk
Estrucutaras de datos ARBOL N-ario
« Respuesta #2 en: Domingo 16 de Noviembre de 2003, 05:38 »
0
Muchas gracias por tu respuesta, si te entendi bien, ya mas o menos lo habia pensado, pero el problema que tengo por lo cual creo que si pienso que debo recurrir a la lista es que de proyecto en la escuela debo hacer un compilador, parecido a C, pero al hacer el analisis sintactico debe analizar linea por linea, checar su estructura y guardarla en un arbol, el problema consiste en que si declaro un arbol de cierto tamaño y no lo llego a utilizar en su totalidad estaria desperdiciando memoria, ya que no seria lo mismo analizar un
x = 2 * y -5;
que tener un
printf ("hola %s",varstring ," diferente de %d" , numint);
se ve raro la forma de impresion pero el programa debe de estar preparado para leerlo bien ya que el tipo de estructura es valida.

Gracias por tu respuesta.:beer: