0

私が取り組んでいる課題を例にとってみましょう。データセットの1つの部分に対してバイナリ検索ツリーを使用し、次にセット内の別の部分に対してリンクリストを使用します。教授が提案した方法は次のとおりです。

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

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

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

ここで、dataは、各レコードの詳細を含むクラスです。明らかに、設定されているため、treeNodeはリンクリストに存在できません。

次のことははるかに簡単ではないでしょうか。

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

次に、次のように宣言できます。

node * listHead;
node * treeRoot;

両方の挿入アルゴリズムをクラスに含めます。

足りないものはありますか?

4

3 に答える 3

0

答えは何ですか?

データが (うーん) メガバイト未満の場合は、メモリ消費について心配する必要はありません。今日の通常のコンピュータでは、1 ギガバイトまたは 2 ギガバイトが一般的です。

アイテムの大きさは?32文字?64k の圧縮マルチメディア? 何か大きい?

両方の手法を使用して 1 つのアイテムを整理することは、どの程度合理的ですか? データが本当に同じである場合、5 ポインター構造は興味深いものです。誰かが 1 つの順序でノードを見つけて、別の順序で関連するノードを参照する可能性があります。

アイテムは無関係ですか、チョークですか、それともチーズですか? 彼らは多次元ですか?人事記録?オーディオファイルの説明?レシピ?

学校では、優れた教師が、一般的な技術や分野の経験をあなたに与えようとしています。美術の授業や作文のようなものです。鉛筆、パステル、5 段落のエッセイ。そのため、教師は 2 つの異なるクラスとコンストラクターを作成するように要求する場合があります。データの一部に 1 つの構造体を使用し、他のデータには別の構造体を使用します。または同じ。という理由だけで。

学校の外では、データはある形式で提供され、それに対して必要な操作があります。「ユースケース」とは、データがどのように使用され、何を保持する必要があり、どのアルゴリズムが使用されるかについてのストーリーです。

このポイントは、バイモーダル検索、直交ポインターの 2 つのペアかもしれません。各アイテムがリストまたはツリーに関連付けられているが、両方が同時に関連付けられていないユニオンである可能性があります。それは、比較対照されるライトワイグのサブセット、ツリー、およびリストの突風かもしれません...

疑問がある場合は、「データ構造 + アルゴリズム = プログラム」です。しかし、教師が何を言おうとしているのか、そしてあなたが彼らの指導に従いたいのかどうかを知ることは有益です. (通常、学校ではそうします。)

于 2011-04-12T00:51:13.357 に答える
0

それを行うことはできますが、余分なポインターでメモリを浪費しています。また、そのようなタイプを混在させると、より混乱する傾向があります。データがリストまたはツリーに配置されているが、両方に挿入されていないと仮定するのは正しいですか? とにかくデータ型が異なる場合、両方が同じ構造を使用する理由はあまりありません。両方のタイプに同じデータを挿入する場合、ツリーのトラバースからリストのトラバースに切り替えることができる可能性があります。

両方のリストにデータを挿入しているため、複合ノード構造を使用するとメモリを節約できます。最初にバイナリ ツリーに挿入し、次に割り当てられたノードをリンク リストに挿入します。純粋な連結リストや二分探索木にはなりませんが、いずれかのようにトラバースすることはできます。

于 2011-03-09T20:08:29.540 に答える
0

実際には、データ項目は両方のリストに挿入されます。割り当ての (平凡な) 目的は、データ セットをセット内の 2 つの異なる要素に分類することです。

そうは言っても、私はメモリを節約していませんか?2 つのノードを組み合わせると、最終的に 5 つのポインターになります。それらを別々のままにしておくと、6 つを使用することになります。また、この方法では、実際にはデータのグループは 1 つしかありません。追跡するデータ項目が 250 個ある場合、750 個のリストが 2 つではなく、1250 個のポインターのグループが 1 つになります。ポインター呼び出しで実際に割り当てられるものを誤解している可能性があります。

于 2011-03-09T20:59:25.260 に答える