C'è forte motivo per non includere più puntatori dei nodi in un nodo da utilizzare in più di una struttura di dati?

voti
0

Prendiamo ad esempio l'assegnazione su cui sto lavorando. Siamo di usare un albero binario di ricerca per un pezzo di una serie di dati e poi una lista collegata per un altro pezzo del set. Il metodo suggerito dal professore era:

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

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

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

Se i dati è una classe contenente le indicazioni di ciascun record. Ovviamente come è impostato, un TreeNode non può esistere nella lista collegata.

Non sarebbe molto più semplice:

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

allora possiamo dichiarare:

node * listHead;
node * treeRoot;

e comprendono entrambi gli algoritmi di inserimento nella classe.

C'è qualcosa che mi manca?

È pubblicato 09/03/2011 alle 19:33
fonte dall'utente
In altre lingue...                            


3 risposte

voti
0

Si può fare, ma si sta sprecando la memoria con i puntatori aggiuntivi. Inoltre, tende ad essere più confuso di mescolare i tipi del genere. Ho ragione nel ritenere che i dati sono sia messo in lista o messo in l'albero, ma non inseriti sia? Non c'è davvero molto motivo di averli entrambi utilizzano la stessa struttura, se sono diversi tipi di dati in ogni caso. Se si sta inserendo gli stessi dati in entrambi i tipi, si potrebbe passare da attraversare l'albero per attraversare la lista se si ha qualche utilità per una tale azione.

Dal momento che si sta inserendo i dati in entrambe le liste, Sarebbe salvare la memoria di utilizzare la struttura del nodo composita. Avrei inserire l'albero binario prima, quindi inserire il nodo assegnato nella lista collegata. Non sarebbe davvero finisce con una lista collegata puro o un albero binario di ricerca, ma sarebbe in grado di essere attraversato come uno dei due.

Risposto il 09/03/2011 a 21:08
fonte dall'utente

voti
0

In realtà, gli elementi di dati devono essere inseriti in entrambe le liste. L'(banale) finalità di gestione è quello di ordinare i set di dati in due diversi elementi in serie.

Quindi, con quello detto, non dovrei risparmio memoria? Combinando i 2 nodi io alla fine con 5 puntatori, se ho lasciato li separano Sarei usando 6. Inoltre ho davvero solo un gruppo di dati in questo modo. se avessi 250 elementi di dati per tenere traccia di, mi piacerebbe avere un gruppo di 1250 puntatori invece di 2 liste di 750. Forse sto equivoco ciò che effettivamente viene allocato con le chiamate di puntatore.

Risposto il 09/03/2011 a 21:59
fonte dall'utente

voti
0

Qual è stata la risposta?

Se i dati sono meno di megabyte (hmmm), non si preoccupi per il consumo di memoria. 1 o 2 Gigabyte è tipico nei computer normali oggi.

Quanto sono grandi gli articoli? 32 char? 64k della multimedialità compressa? Qualcosa di grosso?

Come ragionevole è di organizzare un elemento utilizzando entrambe le tecniche? Se i dati sono in realtà la stessa, quindi una struttura 5 puntatore è interessante- qualcuno potrebbe trovare un nodo in un ordine e quindi passare i nodi connessi nella altro ordinamento.

Sono gli elementi estranei, del gesso, del formaggio? Sono multidimensionale? record personale? descrizioni dei file audio? Ricette?

A scuola, un buon insegnante sta provando a dare esperienza con le tecniche e discipline comuni. Proprio come classe d'arte, o la composizione. Matita, pastelli, 5 comma saggio. Così l'insegnante potrebbe desiderare di scrivere due diverse classi e costruttori. Utilizzare una struct per una parte dei dati, uno diverso per altri dati. O lo stesso. Solo perché.

Al di fuori della scuola, i dati provengono in un formato e ci sono operazioni desiderate su di esso / con esso. "I casi d'uso" sono storie su come vengono utilizzati i dati, quello che deve essere mantenuto, quali algoritmi sono utilizzati.

Il punto di questo potrebbe essere alla ricerca bimodale, 2 paia di puntatori ortogonali. Potrebbe essere sindacati, in cui ogni elemento è ad esse associati, con una lista o di un albero, ma non entrambi allo stesso tempo. Potrebbe essere una raffica di sottoinsiemi lightwieght, alberi e liste, che vengono confrontati e contrapposti ...

In caso di dubbio, "le strutture di dati + algoritmi = programmi". Ma si paga per sapere a che punto l'insegnante sta cercando di fare, e se si vuole seguire il loro esempio. (Di solito, a scuola, si fa.)

Risposto il 12/04/2011 a 01:51
fonte dall'utente

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