¿Hay una fuerte razón para no incluir múltiples punteros a nodos en un nodo para utilizar en más de una estructura de datos?

votos
0

Tomemos por ejemplo la asignación que estoy trabajando. Estamos a utilizar un árbol de búsqueda binaria para una pieza de un conjunto de datos y luego una lista enlazada por otra pieza en el conjunto. El método sugerido por el profesor era:

struct treeNode
{
    data * item;
    treeNode *left, *right;
};

struct listNode
{
    data * item;
    listNode *next, *prev;
};

class collection
{
public:
         ........
}

Cuando los datos es una clase que contendrá los datos de cada registro. Obviamente, como la que está establecido, un treeNode no puede existir en la lista enlazada.

¿No sería mucho más sencillo:

struct node
{
    data * item;
    node *listNext, *listPrev, *treeLeft, *treeRight;
};

entonces podemos declarar:

node * listHead;
node * treeRoot;

e incluyen tanto los algoritmos de inserción en la clase.

¿Se me escapa algo?

Publicado el 09/03/2011 a las 19:33
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
0

Usted puede hacer eso, pero está perdiendo la memoria con los punteros adicionales. Además, tiende a ser más confuso para mezclar tipos así. Estoy en lo cierto al suponer que los datos se sea puesto en la lista ni poner en el árbol, pero no se inserta en ambos? En realidad no hay mucha razón para tenerlos a ambos utilizan la misma estructura si son diferentes tipos de datos de todos modos. Si va a insertar los mismos datos en ambos tipos, usted podría cambiar de recorrer el árbol para recorrer la lista si usted tenía ningún uso para tal acción.

Puesto que usted está introduciendo los datos en ambas listas, ahorraría memoria para utilizar su estructura de nodos compuesto. Me gustaría insertar en el árbol binario en primer lugar, a continuación, inserte el nodo asignado a la lista enlazada. En realidad no se termina con una lista enlazada puro o un árbol de búsqueda binaria, pero sería capaz de ser atravesado al igual que cualquiera de ellos.

Respondida el 09/03/2011 a las 21:08
fuente por usuario

votos
0

En realidad, los elementos de datos son para insertarse en ambas listas. El (mundanas) propósito de la asignación es para ordenar los conjuntos de datos en dos elementos diferentes en el conjunto.

Así que con eso dicho, no iba a estar ahorrando memoria? La combinación de los 2 nodos termino con 5 puntos, si dejaba separados que estaría utilizando 6. También en realidad sólo tengo un grupo de datos de esta manera. si tuviera 250 elementos de datos para realizar un seguimiento de, me gustaría tener un grupo de 1250 punteros en lugar de 2 listas de 750. Tal vez estoy malentendido lo que realmente se asigna con llamadas de puntero.

Respondida el 09/03/2011 a las 21:59
fuente por usuario

votos
0

¿Cuál fue la respuesta?

Si los datos son menos de megabytes (hmmm), no se preocupe por el consumo de memoria. 1 o 2 gigabytes es típico en los ordenadores normales hoy en día.

¿De qué tamaño son los artículos? 32 Char? 64k de la multimedia comprimido? ¿Algo grande?

Lo razonable es que para organizar un elemento utilizando ambas técnicas? Si los datos son realmente lo mismo, a continuación, una estructura de 5 puntero es interesante- alguien podría encontrar un nodo en un pedido y luego vaya nodos relacionados en el otro pedido.

Son los elementos no relacionados, una tiza, un poco de queso? ¿Son multidimensional? registros de personal? descripciones de archivo de audio? ¿Recetas?

En la escuela, un buen maestro está tratando de darle experiencia con técnicas y disciplinas comunes. Al igual que la clase de arte, o la composición. Minas, pasteles, 5 párrafos de un ensayo. Por lo que el profesor desee que escriba dos clases diferentes y constructores. Utilice una estructura para una parte de los datos, una diferente para otros datos. O la misma. Simplemente porque.

Fuera de la escuela, los datos vienen en un formato y hay operaciones deseadas en él / con ella. "Los casos de uso" son historias acerca de cómo se utilizan los datos, lo que ha de mantenerse, lo que los algoritmos se utilizan.

El punto de esto podría ser la búsqueda bimodal, 2 pares de punteros ortogonales. Podría ser sindicatos, donde cada elemento se asssociated con una lista o un árbol, pero no ambas al mismo tiempo. Podría ser una ráfaga de subconjuntos Lightwieght, árboles y listas, que se comparan y contrastan ...

En caso de duda, "estructuras de datos algoritmos + = Programas". Sin embargo, vale la pena saber qué punto el maestro está tratando de hacer, y si usted quiere seguir su ejemplo. (Por lo general, en la escuela, lo hace.)

Respondida el 12/04/2011 a las 01:51
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more