Si N es una constante de tiempo de compilación, puede simplemente #define
o const int
, junto con una estructura como
const int N = 4; typedef struct node { int val; struct * node children [N]; } nodo; raíz del nodo = {0}; // inicializa todo a 0 nodo * nuevo_nodo (int val) { nodo * x = calloc (sizeof (nodo), 1); // malloc + memset (0) x-> val = val; volver x; } func nulo () { nodo * n = nuevo_nodo (5); n-> hijos [0] = nuevo_nodo (10); //n->children[1..3] son NULL gratis (n-> niños [0]); libre (n); }
Si N es un valor dinámico de tiempo de ejecución, debe saber con certeza cuál será su valor antes de asignar cualquier nodo en el árbol. Es posible tener un valor diferente de N para cada nodo. Si desea aumentar el valor de N para todos los nodos en un árbol existente, probablemente sea mejor copiar todos los datos en un árbol nuevo con más almacenamiento. Un esquema de asignación simple se vería así:
typedef struct node { int val; estructura * nodo [0]; } nodo; raíz del nodo = {0}; // válido, pero tiene N = 0 //forma apropiada nodo * nuevo_nodo (int n, int val) { nodo * x = calloc (sizeof (nodo) + n * sizeof (nodo *), 1); x-> val = val; volver x; } func nulo () { nodo * n = nuevo_nodo (5, 3); n-> hijos [0] = nuevo_nodo (10, 3); // n-> hijos [1] es NULL n-> hijos [2] = nuevo_nodo (15, 3); gratis (n-> niños [0]); libre (n); }
Esto se puede usar de la misma manera que la versión N constante de tiempo de compilación. Se basa en una peculiaridad de matrices dentro de estructuras que técnicamente cuenta como desbordamiento de búfer. Algunos analizadores estáticos o depuradores de tiempo de ejecución en profundidad, como valgrind, pueden causarle cierta pena, incluso si es válido.
- Cómo escribir un algoritmo
- Modelo similar: ¿Cuál es el mejor algoritmo para usar en grandes conjuntos de datos?
- ¿Cuál es la mayor complejidad de tiempo que cualquier juez en línea puede aceptar como O (10 ^ 9) o algo en términos de números?
- ¿Es posible codificar un algoritmo de manera que cuando se proporciona una imagen de entrada y la ropa que una persona usa en la imagen se recorta y compara con una imagen en una base de datos y sale con la coincidencia exacta / coincidencia más cercana?
- ¿Es posible tener un número de elementos en una matriz más que el tamaño de la matriz que se define en un momento de compilación?
Si sus datos son estáticos, podría ser mejor contar el almacenamiento requerido y asignar un único búfer para todos los nodos. Incluso podría tener el menor valor posible de N para cada nodo, pero podría ser difícil saber qué es una hoja (N = 0) a menos que todas sus hojas se encuentren a la misma profundidad máxima.