この二重リンクリストの作成についてどのように行きますか?
-
21-12-2019 - |
質問
私は現在データ構造とリンクリストについて学習しています。二重リンクリストを作成しようとしています、そして私はそれをやる方法を確信していません。 「ノード」のデータは、すでに作成したクラスになりたいです。リンクされたリストについてオンラインで見つけることができるすべて、それらは整数値を使用するだけで、他のクラスを組み込むのが最善であるかはわかりません。
私がやることだと思います....
私は抽象クラスの「アカウント」を持っています。その後、クラスの「節約」と「チェック」はアカウントから派生しています。 「ノード」のデータをアカウントタイプ、おそらく基本クラスポインタになるようにしたいので、「節約」と「チェック」の両方を使用できます。
私の「ノード」クラスで言ってみましょう、私のプライベートデータメンバーは、アカウント自体、ネクストポインタ、および前のポインタへの基本クラス 'アカウント'ポインタです。クラス 'list'はリンクリストを管理し、新しいノードを作成します。しかし、どのようにしてアカウントのメンバー関数にアクセスしますか?
私はこれに近づく最善の方法が何であるか疑問に思いましたか?アカウントに関するデータを取得するために、クラス 'ノード'にゲッターを追加する必要がありますか?それとも、「節約」を作り、ノードを「チェック」して、次のポインターとプライベートデータメンバーへの前のポインターを追加することをお勧めしますか。
解決
汎用二重リスト
を作成する必要があります。template <class T> class List{
T value;
Node& next; //Or Node* whatever you choose
Node& prev;
public:
...
};
.
このようにあなたのリストはそれがリストとして役立つでしょう - リストとして。 さて、あなたがアカウントのリストが必要な場合は
を宣言するだけです。List<Account> allAccounts = new List<Account>(); //assuming there's a default c'tor
.
とアカウントと残りの間にいくつかの関係を持つ必要がある場合は、継承を使用することができます。
あなたがあなたのリストを一般的であり、どんな型に制約されていないという事実はあなたのコードをよりエレガントで清潔に見て、そして理解するようにするでしょう。