回答:
以前にStackOverflowで行った同様の質問でリストを見つけました。
ハッシュテーブル-高速データルックアップに使用-コンパイラ、データベースインデックス、キャッシュ、一意のデータ表現用のシンボルテーブル。
トリー-携帯電話でオートコンプリートやスペルチェックを行うために見られるような辞書。
サフィックスツリー-ほとんどのワードプロセッサで使用される高速全文検索。
スタック-ワードプロセッサでの元に戻す/やり直し操作、式の評価、構文解析、JVMなどの多くの仮想マシンはスタック指向です。
キュー-後で処理するためにさまざまなエンティティが格納および保持されるトランスポートおよびオペレーションの研究。つまり、キューはバッファの機能を実行します。
優先キュー-カーネルでのプロセスのスケジューリング
ツリー-パーサー、ファイルシステム
基数ツリー-IPルーティングテーブル
BSPツリー-3Dコンピュータグラフィックス
グラフ-ソーシャルネットワーキングサイトの接続/関係、ルーティング、通信ネットワーク、データ編成など。
ヒープ-LISPでの動的メモリ割り当て
これは、RV Pradeepによって最初に投稿された回答です
その他、あまり役に立たないリンク:
私はあなたと同じ船に乗っています。技術面接のために勉強する必要がありますが、リストを暗記することはあまり役に立ちません。3〜4時間の余裕があり、さらに詳しく知りたい場合は、チェックアウトをお勧めします
mycodeschool
私はCourseraやブログやテキストなどの他のリソースを調べましたが、それらは十分に包括的ではないか、スペクトルの反対側にあり、必須のコンピュータサイエンス用語では密度が高すぎることがわかりました。
ビデオの男は、データ構造に関する講義をたくさん持っています。ばかげたドローイングや、ほんの少しのアクセントを気にしないでください。選択するデータ構造だけでなく、人々がデータ構造について考えるときに考慮すべき他のいくつかのポイントを理解する必要があります。
私が理解しているように、データ構造とは、効率的に管理できる電子システムのメモリにあるデータです。多くの場合、それはメモリのゲームまたはデータの高速アクセスです。メモリに関しても、その最終製品の会社のコストに基づいてデータを管理することでトレードオフが行われます。効率的に管理することで、最終製品の主要な要件に基づいて、データにどのようにアクセスできるかがわかります。これは非常に高レベルの説明ですが、データ構造は非常に大きなテーマです。面接担当者のほとんどは、リンクされたリストと関連する主題である時間に応じて、面接で話し合う余裕のあるデータ構造に飛び込みます。
現在、これらのデータ型は、論理的に構築およびアクセスされる方法に基づいて、プリミティブ、抽象、複合に分割できます。
これがあなたの飛び込みに役立つことを願っています。
Skiennaによる優れた本「アルゴリズム設計マニュアル」には、アルゴリズムとデータ構造の膨大なリポジトリが含まれています。
大量の問題について、データ構造とアルゴリズムが説明され、比較され、実際の使用法が説明されています。著者は、実装とオリジナルの研究論文への参照も提供します。
この本は、問題を解決するのに最適なデータ構造を検索する場合に、机の上に置いておくのに最適です。また、面接の準備にも非常に役立ちます。
もう1つの優れたリソースは、データ構造とアルゴリズムのNIST辞書です。
データ構造のより実用的なアプリケーションはほとんどありません
赤黒木(挿入/削除が頻繁に行われ、検索が少ない場合に使用)-赤黒木を使用したK平均クラスタリング、データベース、単純なデータベース、辞書内の単語の検索、Webでの検索
AVLツリー(より多くの検索とより少ない挿入/削除)-データ分析とデータマイニング、およびより多くの検索を必要とするアプリケーション
最小ヒープ-クラスタリングアルゴリズム
さまざまなデータ構造のランキングは、少なくとも部分的に問題のコンテキストに関連付けられます。アルゴリズムの時間と空間のパフォーマンスを分析する方法を学ぶのに役立ちます。通常、「ビッグO表記」が使用されます。たとえば、バイナリ検索はO(log n)時間です。つまり、要素を検索する時間は、要素数の(ベース2での)ログです。直感的には、各ステップで残りのデータの半分が無関係として破棄されるため、要素数を2倍にすると、時間は1ステップ増えます。(バイナリ検索はかなり適切にスケーリングします。)スペースのパフォーマンスは、より大きなデータセットのメモリ量の増加に関係しています。また、big-O表記は定数係数を無視することに注意してください。データセットが小さい場合でも、定数係数の高いO(n * log n)アルゴリズムよりもO(n ^ 2)アルゴリズムの方が速い場合があります。
時間と空間に加えて、データ構造がソートされるかどうか(ツリーとスキップリストはソートされる、ハッシュテーブルはソートされない)、永続性(バイナリツリーは古いバージョンのポインタを再利用できるが、ハッシュテーブルはその場で変更される)などの他の特性が含まれます。
データ構造を比較するには、いくつかのデータ構造の動作を学習する必要がありますが、パフォーマンスが異なる理由を理解する1つの方法は、いくつかを綿密に調査することです。単一リンクリスト、バイナリサーチツリー、スキップリストを比較することをお勧めします。これらはすべて比較的単純ですが、特性が大きく異なります。値を見つける、新しい値を追加する、すべての値を順番に見つけるなどにどれだけの作業が必要かを考えてください。
アルゴリズムやデータ構造のパフォーマンスの分析については、人々が推奨するさまざまなテキストがありますが、それらが私にとって本当に理にかなっているのはOCamlを学ぶことでした。複雑なデータ構造を処理することはMLの強力なスーツであり、Cのようにポインターとメモリ管理を回避できる場合、それらの動作ははるかに明確になります(ただし、データ構造を理解するためにOCamlを学ぶことはほぼ間違いなく長い道のりです。:))