0

私は以下を提供するデータ構造を探しています:

  1. 前面に要素を追加する
  2. 2つの要素を交換する
  3. 要素の削除
  4. (最後の位置ではなく)要素を追加するとき、他の要素は(キューのように)スリップバックする必要があります
  5. すべての要素へのアクセス
  6. ジェネリックはいいのですが、必須ではありません

MSDNで見つけたデータ構造が私の要求を満たしていません

  • Listスワップ方式を提供しLinkedListない
  • でそれを行うことはできますがArrayList、前の位置に要素を追加するときは、その恐ろしい非効率性を推測します(後ろのすべての要素をコピーして再読み込みする必要があるため)
  • HashTable注文を提供しません
  • Queueスワップ、ランダムアクセス、..を提供しStackないでください。

独自のデータ構造を作成することもできますが、.NETライブラリが非常に大きいため、車輪の再発明はしたくありません。

編集:

process-priority-schedulerのような同様のものを提供するデータ構造が必要です。最初のエントリの優先度が最も高く、最後のエントリの優先度が最も低くなります。要素のプロパティを変更する(スワッピング)か、要素を完全に削除する(削除)必要がある場合があります。最近追加した要素の優先度が最も高いはずです(そのため、前の位置に追加します)

4

2 に答える 2

3

あなたはそれらの極端な数をリストアップしたので、あなたは本当にあなたがそれらの操作をするつもりである頻度を理解する必要があります。

これがあなたの考えについての私の考えです:

  • get / setのインデックスを作成している場合、スワップメソッドの実装は簡単です。
  • コピー時間が心配な場合は、リストを逆にして、先頭に安価な挿入を含めることができます。ロジックを少し書き直してそれを実行する必要がありますが、それでも配列をバックエンドとして使用することはできます。

また、最後の注意として、ある種の自動ソートは必要ないことは確かです。これにより、これが非常に簡単になります。

于 2013-01-04T15:51:26.143 に答える
2

あなたが探しているものはヒープのように聞こえます。

ウィキペディア:ヒープ

ヒープは通常、優先度を管理するために使用され、キューの最上位に最も優先度の高いアイテムを配置し、ヒープに追加または削除されたさまざまな優先度のアイテムに基づいて再配置できます。

インターバルヒープを実装したジェネリックコレクションライブラリは次のとおりです。

http://www.itu.dk/research/c5/

于 2013-01-04T16:22:51.307 に答える