Existuje silný důvod, aby zahrnovalo více ukazatelů uzlů v uzlu použít ve více než jedné datové struktury?

hlasů
0

Vezměme si například úkol jsem pracoval na. Jsme použít binární vyhledávací strom za jeden kus sady dat a pak propojeného seznamu pro další kus v sadě. Navržená metoda profesora bylo:

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

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

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

Kde jsou data je třída obsahující údaje o jednotlivých záznamů. Je zřejmé, jak to nastavit, je TreeNode nemůže existovat v připojeném seznamu.

Nebylo by to být mnohem jednodušší:

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

pak můžeme prohlásit:

node * listHead;
node * treeRoot;

a zahrnují vložení algoritmy do třídy.

Je tu něco, co mi chybí?

Položena 09/03/2011 v 19:33
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Můžete to udělat, ale jste plýtvání paměti s možností ukazatelů. Také, to inklinuje být více matoucí pro různé typy, jako je to. Mám pravdu v předpokladu, že data jsou buď vloží do seznamu, nebo dát do stromu, ale není vložen do obou? Je tu opravdu není moc důvod nechat obě používají stejnou strukturu, pokud jsou různé datové typy stejně. Při vkládání stejných dat do obou typů, mohl byste případně přejít z křížení strom na projíždějící seznamu, pokud jste měl nějaké využití pro takovou akci.

Vzhledem k tomu, že jste vkládání dat do obou seznamech, by se ušetřilo místo v paměti používat kompozitní strukturu uzlu. Chci vložit do binárního stromu, poté vložte přidělené uzlu do propojeného seznamu. Ty by opravdu skončit s čistým propojeného seznamu nebo binárního vyhledávacího stromu, ale to by bylo možné projet jako jeden jeden.

Odpovězeno 09/03/2011 v 21:08
zdroj uživatelem

hlasů
0

Ve skutečnosti jsou datové položky, které mají být vloženy do obou seznamů. The (světský) Účelem tohoto úkolu je třídit datových souborů ve dvou různých prvků v sestavě.

Takže s tím řekl, bych neměl být úspora paměti? Kombinující 2 uzly I skončí s 5 ukazateli, když jsem odešel z nich oddělit bych používat 6. Také jsem opravdu jen jednu skupinu dat tímto způsobem. kdybych měl 250 datových položek ke sledování, že mám jednu skupinu 1250 ukazatelů namísto 2 seznamy 750. Možná jsem nedorozumění, co se skutečně dostane přiděleno s ukazatelem hovory.

Odpovězeno 09/03/2011 v 21:59
zdroj uživatelem

hlasů
0

Co to bylo za odpověď?

Pokud vaše data je menší než (hmmm) megabytů, nebojte se o spotřebu paměti. 1 nebo 2 GB je typické u normálních počítačů dnes.

Jak velké jsou položky? 32 char? 64k stlačeného multimédia? Něco velkého?

Jak rozumné je to uspořádat jednu položku pomocí obě techniky? Jsou-li tyto údaje opravdu stejné, pak 5 ukazatel struktura interesting- někdo mohl najít uzel v jedné objednávce a přejděte související uzly v jiném uspořádání.

Jsou položky nesouvisející, některé křídy, některé sýry? Jsou multidimenzionální? osobní záznamy? Audio popisy soubor? Recepty?

Ve škole, dobrý učitel se snaží dát vám zkušenost s běžnými technikami a disciplínami. Stejně jako umění třídě, nebo složení. Tužka, pastely, 5 esej odstavce. Takže učitel chtít psát dvě různé třídy & konstruktérů. Používat jednu struct pro jednu část dat, jinou pro další data. Nebo stejný. Jen proto.

Mimo školu, data pocházejí ve formátu a tam jsou operace požadované na něm / s ním. „Použít případy“ jsou příběhy o tom, jak jsou údaje využívány, co musí být, co algoritmy jsou používány.

Výchozím bodem by to mohlo být bimodální vyhledávání, 2 páry kolmých ukazatelů. Mohlo by to být odbory, kde je každá položka asssociated s seznamu nebo stromu, ale ne obojí zároveň. Mohlo by to být závan lightwieght podskupin, stromy a seznamy, které jsou ve srovnání a kontrastních ...

V případě pochybností, „datové struktury + algoritmy = programy“. Ale vyplatí se vědět, co bod učitel se snaží, a to, zda chcete, aby následovali jejich příkladu. (Obvykle ve škole, co děláte.)

Odpovězeno 12/04/2011 v 01:51
zdroj uživatelem

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