0

ルート、CFile、サブディレクトリの 3 つのクラスがあります。ルートは抽象クラスです。CFile と SubDirectory は Root から派生します。CFile には、name:string、size:int、level:int という属性があります。SubDirectory には、name:string、size:int、level:int、ファイルとディレクトリの両方を含むベクトル、およびファイルまたはディレクトリをベクトルにプッシュする関数 void add() という属性があります。ディレクトリ内のファイルの場合、ファイルのレベルはディレクトリのレベルよりも 1 つ高くなります。すべてのセッターとゲッターが定義されています。

現在、現在のディレクトリ (コンピューターのフォルダー) 内のすべてのエントリを構築できる DirRead.h というファイルがあります。各エントリには、ファイル名、サイズ、レベル、およびタイプ (ファイルまたはディレクトリ) があります。main 関数では、DirRead からの情報を入力として使用して、ファイル システムの階層を構築するよう求められます (CFile と SubDirectory を使用)。DirRead.h は、事前注文トリバーサルを実行します。この場合、再帰は受け入れられません (試してみたところ、DirRead.h がエラーを報告しました)。入力を処理するためにスタックを使用するように求められますが、方法がわかりません。どうやらここはレベルが重要らしい。スタックを作成し、すべてのファイルとディレクトリをスタックにプッシュしてから、レベルを比較して階層を形成しようとしました。しかし、Root には Add 機能がありません。CFile を SubDirectory に追加する方法はありません。これらはすべて Root* であるためです。誰でもこれを行う方法を知っていますか? どうも。

4

1 に答える 1

1

スタックを使用して、まだ探索していないディレクトリを追跡します。次のアルゴリズムを使用できます。

  1. ルート ディレクトリをスタックにプッシュします。

  2. スタックから一番上のエントリをポップします。スタックが空の場合は、停止してください。

  3. スタックから取り出したディレクトリをトラバースします。その中のすべてのファイルとディレクトリをデータ構造に追加します。また、見つけたすべてのディレクトリをスタックにプッシュします。

  4. 手順 2 に進みます。

于 2013-02-14T04:45:37.730 に答える