Is er sterke reden meerdere knooppunten pointers niet op te nemen in een knoop te gebruiken in meer dan een datastructuur?

stemmen
0

Neem bijvoorbeeld de opdracht waar ik aan werk. We zijn naar een binaire zoekboom gebruiken voor een stuk van een set van gegevens en vervolgens een gekoppelde lijst voor een ander stuk in de set. De voorgestelde methode door de professor was:

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

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

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

Wanneer de gegevens is een klasse met de kenmerken van elk record. Het is duidelijk dat als het is ingesteld, kan een TreeNode niet bestaan ​​in de gekoppelde lijst.

Zou het niet veel eenvoudiger:

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

dan kunnen we verklaren:

node * listHead;
node * treeRoot;

en omvatten zowel het inbrengen algoritmen in de klas.

Is er iets wat ik mis?

De vraag is gesteld op 09/03/2011 om 19:33
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

U kunt dat doen, maar je verspilt geheugen met de extra pointers. Ook is het de neiging om meer verwarrend voor types zoals die te mengen zijn. Ben ik juist in de veronderstelling dat de gegevens ofwel in de lijst wordt gezet of zet in de boom, maar niet in beide geplaatst? Er is echt niet veel reden om ze beide dezelfde structuur gebruiken als ze zijn verschillende soorten data toch. Als u het invoegen van dezelfde gegevens in beide typen, kun je in potentie overschakelen van de boom te verplaatsen totdat het doorkruisen van de lijst als u geen gebruik van een dergelijke actie had.

Omdat je het invoegen bent de gegevens in beide lijsten, zou het geheugen op te slaan op uw samengestelde knooppunt structuur te gebruiken. Ik zou voegen in de binaire boom eerst, dan plaatst u de toegewezen knooppunt in de gekoppelde lijst. Je zou het niet echt eindigen met een zuivere gekoppelde lijst of een binaire zoekboom, maar het staat om te worden doorlopen als één zou zijn.

antwoordde op 09/03/2011 om 21:08
bron van user

stemmen
0

Eigenlijk is de data items zijn in beide lijsten te worden gestoken. De (alledaagse) doel van de opdracht om de gegevensverzamelingen te sorteren in twee verschillende elementen in de set.

Dus met dat gezegd, zou ik niet kunnen besparen geheugen? Het combineren van de 2 nodes ik eindigen met 5 pointers, als ik liet ze scheiden Ik zou gebruiken 6. Ook ik eigenlijk maar één groep van gegevens op deze manier. als ik had 250 data-items bij te houden, zou ik een groep van 1250 pointers in plaats van 2 lijsten van 750. Misschien ben ik verkeerd begrepen wat er eigenlijk wordt toegewezen met wijzer gesprekken.

antwoordde op 09/03/2011 om 21:59
bron van user

stemmen
0

Wat was het antwoord?

Als uw gegevens minder dan (hmmm) megabytes is, maak je geen zorgen over het geheugen verbruik. 1 of 2 GB is een typisch voorbeeld in de normale computers vandaag.

Hoe groot zijn de items? 32 char? 64k van gecomprimeerde multimedia? Iets groots?

Hoe redelijk is het om een ​​item met beide technieken te organiseren? Als de gegevens zijn eigenlijk hetzelfde, zou dan een 5 pointer structuur interessant- iemand een knooppunt te vinden op een bestelling en blader gerelateerde knooppunten in het andere bestellen.

Zijn de items los van elkaar, wat kalk, wat kaas? Zijn ze multidimensionale? personeelsadministratie? Audio bestandsbeschrijvingen? Recepten?

Op school, is een goede leraar probeert je ervaring met gebruikelijke technieken en disciplines geven. Net als kunst klasse, of samenstelling. Potlood, pastels, 5 paragraaf essay. Dus de leraar wilt u misschien twee verschillende klassen en constructeurs te schrijven. Gebruik een structuur voor een deel van de gegevens, andere voor andere gegevens. Of hetzelfde. Daarom.

Buiten de school, de gegevens komen in een formaat en er zijn operaties gewenst op / met het. "Use cases" zijn verhalen over hoe de gegevens worden gebruikt, wat moet worden gehouden, wat algoritmen worden gebruikt.

De punt hiervan zou bimodale zoeken, 2 paar orthogonale pointers zijn. Het is misschien Unions, waarbij elk item wordt asssociated met een lijst of een boom, maar niet beide tegelijk. Het is misschien een vlaag van lightwieght subsets, bomen en lijsten, die worden vergeleken en gecontrasteerd zijn ...

Bij twijfel, "datastructuren + algoritmen = programma's". Maar het loont om te weten welk punt de leraar probeert te maken, en of je wilt om hun voorbeeld te volgen. (Meestal, op school, je doet.)

antwoordde op 12/04/2011 om 01:51
bron van user

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