Y at-il de fortes raisons de ne pas inclure des pointeurs de noeuds multiples dans un nœud à utiliser dans plus d'une structure de données?

voix
0

Prenons par exemple l'affectation je travaille. Nous sommes d'utiliser un arbre de recherche binaire pour un morceau d'un ensemble de données et une liste chaînée pour une autre pièce dans l'ensemble. La méthode proposée par le professeur était:

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

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

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

Lorsque les données est une classe contenant les détails de chaque enregistrement. De toute évidence, comme il est mis en place, un treeNode ne peut exister dans la liste chaînée.

Ne serait-il pas beaucoup plus simple à:

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

alors nous pouvons déclarer:

node * listHead;
node * treeRoot;

et inclure des algorithmes d'insertion dans la classe.

Y at-il quelque chose que je suis absent?

Créé 09/03/2011 à 19:33
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Vous pouvez le faire, mais vous perdez la mémoire avec les pointeurs supplémentaires. , Il a aussi tendance à être plus source de confusion pour mélanger les types comme ça. Ai-je raison de supposer que les données sont soit mis dans la liste ou mis dans l'arbre, mais pas inséré dans les deux? Il n'y a vraiment pas beaucoup de raisons d'avoir les deux utilisent la même structure si elles sont les différents types de données de toute façon. Si vous insérez les mêmes données dans les deux types, vous pourriez potentiellement passer de traverser l'arbre pour parcourir la liste si vous aviez une utilisation pour une telle action.

Puisque vous insérez les données dans les deux listes, il économiser de la mémoire à utiliser la structure de votre noeud composite. J'insérer dans l'arbre binaire d'abord, puis insérez le noeud attribué dans la liste chaînée. Vous ne seriez pas vraiment finir avec une liste chaînée pure ou un arbre de recherche binaire, mais il serait en mesure de traverser comme l'un.

Créé 09/03/2011 à 21:08
source utilisateur

voix
0

En fait, les éléments de données doivent être insérées dans les deux listes. Le but de la mission (banale) est de trier les ensembles de données en deux éléments différents dans l'ensemble.

Donc, avec cela dit, serais-je pas la mémoire VALIDATION? En combinant les 2 nœuds je finis avec 5 points, si je les ai laissés séparer j'utiliserai 6. Aussi je n'ai vraiment un groupe de données de cette façon. si j'avais 250 éléments de données pour garder une trace de, je l'aurais un groupe de 1250 pointeurs au lieu de 2 listes de 750. Peut-être que je suis malentendu ce qui sera effectivement alloué avec appels pointeur.

Créé 09/03/2011 à 21:59
source utilisateur

voix
0

Quelle a été la réponse?

Si vos données est inférieure à (hmmm) méga-octets, ne vous inquiétez pas la consommation de mémoire. 1 ou 2 Gigaoctets est typique dans les ordinateurs normaux aujourd'hui.

Quelle est la taille sont les éléments? 32 omble chevalier? 64k du multimédia comprimé? Quelquechose d'énorme?

Comment est-il raisonnable d'organiser un élément en utilisant les deux techniques? Si les données sont vraiment identiques, une structure 5 pointeur est intéressant- quelqu'un pourrait trouver un nœud dans un ordre, puis parcourir les noeuds associés dans l'autre ordre.

Les éléments non liés, de la craie, un peu de fromage? Sont-ils multidimensionnel? dossiers du personnel? descriptions de fichiers audio? Recettes?

À l'école, un bon professeur essaie de vous donner une expérience avec des techniques communes et disciplines. Tout comme la classe d'art ou d'une composition. Crayon, pastels, 5 essai de paragraphe. Ainsi, l'enseignant pourrait vouloir vous écrire deux classes différentes et constructeurs. Utiliser une structure pour une partie des données, une autre pour les autres données. Ou même. Tout simplement parce que.

En dehors de l'école, les données proviennent dans un format et il y a des opérations souhaitées sur elle / avec elle. « Les cas d'utilisation » sont des histoires sur la façon dont les données sont utilisées, ce qui doit être maintenu, quels algorithmes sont utilisés.

Le point de cela pourrait être bimodale recherche, 2 paires de pointeurs orthogonales. Il pourrait être des syndicats, où chaque élément est asssociated une liste ou un arbre, mais pas les deux en même temps. Il est peut-être une vague de sous-ensembles lightwieght, des arbres et des listes, qui sont comparées et contrastées ...

En cas de doute, « structures de données + algorithmes = programmes ». Mais il est utile de savoir quel point l'enseignant essaie de faire, et si vous voulez suivre leur exemple. (En général, à l'école, que vous faites.)

Créé 12/04/2011 à 01:51
source utilisateur

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