データ構造は何ですか?
手短に言えば、データ構造は、特定のレイアウトデータを格納する容器です。この「レイアウト」は、他の操作が非効率的であるが、データ構造は、特定の操作のために効率的であるかを判断します。まず、我々は現実的な問題に対処する上で最も適切なデータ構造を選択するために、様々なデータ構造を理解する必要があります。
なぜ我々は、データ構造が必要なのでしょうか?
最も重要なエンティティの間でコンピュータ・サイエンス、およびデータのデータ構造内のデータは、組織のいくつかの形式で保存することができ、そのため、データ構造の値は自明です。
どんなにあなたがデータに対処する必要がするやり方解決何の問題 - それは給与、株価、買い物リスト、または単純な電話帳の問題をスタッフに関係するかどうかを。
異なるシナリオによれば、特定の形式で格納され、必要なデータ、。異なるフォーマットで保存されたデータのニーズを満たすために多くのデータ構造があります。
共通のデータ構造
まず、最も一般的なデータ構造のいくつかをリストアップ、私たちは一つ一つを説明します:
アレイスタックキューリストツリー図ののトライ(効率的なツリー構造であるが、それは別々に注目すべきである)ハッシュ(ハッシュ・テーブル)
配列
配列は、最も単純で最も広く使用されているデータ構造です。アレイによるその他のデータ構造、スタック、キューは、進化しました。以下の単純なアレイ要素(1,2,3及び4)、アレイ4の長さを含んでいます。
各データ要素は、我々が配置されているアレイ内の各要素の位置を示すインデックスを、呼び出し正の値に関連付けられます。ほとんどの言語は、最初のインデックスはゼロになります定義します。
以下は、配列の2つのタイプがあります。
(上図)の一次元アレイ、多次元アレイ(アレイのアレイ)
アレイの基本操作
指定したインデックス位置に要素を挿入Insert-- Get--は、要素のインデックス位置を返しますDelete--指定されたインデックスの要素はSize--すべての配列の要素数を取得します
インタビューは、しばしば、アレイに関するよくある質問しました
アレイ二番目に小さい要素を探して最初のものが繰り返していない見つけるために、整数配列2つの規則正しいアレイがマージ正および負の値の配列を並べ替えます
スタック
有名なのは、ほとんどすべての任意のアプリケーションを介して元に戻します。しかし、あなたは今までそれがどのように機能するかについて考えていますか?この問題に対する解決策は、メモリ記憶履歴の作業条件で、最終ステータス事前配置順である(もちろん、それが特定の数に限定されます)。これは、達成するために、配列を使用する方法はありません。しかし、非常に便利であるスタック、と。
これは、垂直に積み重ねられ、スタック帳として考えることができます。本の真ん中を得るために、あなたはそれに配置されたすべての書籍を削除する必要があります。これは、LIFO(うち最初の、の最後の)作品です。
3つのデータ要素(1、2及び3)を含む図スタック、請求された最初の取り外し可能なトップ3:
スタックの基本的な操作
先頭に要素を挿入Push-- Pop--リターンとトップ要素削除スタックが空の場合isEmpty--を、trueが返されTop--トップ要素を、それを削除しません。
インタビュー・スタックについてのよくある質問
後置表現は、スタックを使用して計算されるスタックの要素をソートするために括弧バランスの表現か否かを判断します
キュー
スタックと同様、キューは、別の線順次記憶素子のデータ構造です。最大の違いは、キュースタックとスタックはLIFO(アウト最初、の最後)であり、キューは先入れ先出しで、すなわち、FIFOであることです。
キューの現実の完璧な例:キューチケットブースチーム。票を得るために最初の人の上面、その後、チームを去る - 新規参入がある場合は、彼はテールキューではなく、最初のチームに行く必要があります。
最初のものは上部で除去される4つのキュー要素(1,2,3及び4)を含む図。
新しい要素を挿入し、最初のチームの要素を削除します
キューの基本的な操作
エンキュー() -キュー要素の尾部に挿入される)デキュー( -キューの素子ヘッド除去のisEmptyを() -キューが空の場合、真を返す(トップ) -キューの最初の要素を返します
インタビューキューに関するよくある質問
キューを使用すると、スタック表す逆キューの最初のk個の要素の、1からnの2進数を生成するためにキューを使用して
リスト
もう一つの重要な線形リストは、アレイのようなビットは、一見が、割り当てメモリ、内部構成とデータの挿入および削除操作に基本的な態様が異なっていてもよく、データ構造です。
各ノードはデータと後続ノードを指し示すポインタを含むリストをリンクされたノードの鎖、など。さらに、リストの最初の要素にリストのヘッドポインタを含むが、リストが空である、またはヌルポイントは、それには、特定のコンテンツはありません。
リストは、一般的に、ファイルシステム、ハッシュテーブルと隣接テーブルを実装するために使用されます。
これは、内部の構造を示すリストです。
リストには次の種類が含まれています。
シングルチェーン(単一指向性)二重リンクリスト(双方向)
基本的な操作のリスト:
InsertAtEnd -指定された要素のリストの最後に挿入InsertAtHead -リンクリスト/ヘッドの先頭に指定された要素を挿入削除-リンクのリストから、指定された要素を削除DeleteAtHead -の最初の項目にリンクされたリスト削除検索-リストから指定された要素を返すのisEmpty -リストが空の場合、trueを返します
インタビューは頻繁にリストに関するよくある質問しました
反転リストにおけるループ検知リスト結果のリストの最後から二番目のNノードを削除するリストのエントリを重複
マップ
図は、相互接続ネットワークの形態におけるノードの集合です。また、頂点ノードと呼びます。ノード(x、y)の対は、x yの頂点の頂点に接続され、エッジ(縁)と呼ばれています。エッジは、重量/コストを含む頂点からYのコストにXを示してもよいです。
グラフの種類
無向グラフ有向グラフ
プログラミング言語で、図2の形態で表すことができます。
隣接行列の隣接リスト
一般的なグラフトラバーサルアルゴリズム
BFSの深さ優先探索
インタビューのグラフについてのよくある質問
深さ優先探索と幅の実装図の中の木かどうかチェックをグラフ計算エッジの数は、2つの頂点間の最短経路を見つけるために
ツリー
ツリー構造は頂点(ノード)とそれらの縁部が組成物に接続されていることにより、階層的なデータ構造です。図同様の木が、木やループを区別する重要な特徴は、ツリーには存在しません。
ツリー構造は、広くストレージの問題を解決するための効果的なメカニズムを提供することができ、人工知能と複雑なアルゴリズムで使用されています。
これは、ツリー、ツリーデータ構造および使用される基本的な用語の簡単な概略図です。
ルート - ルート
親 - 親
子 - 子ノード
リーフ - リーフノード
兄弟 - 兄弟
次は、ツリー構造の主な種類があります:
N進ツリーバランスツリーバイナリ二分探索木AVLツリー赤黒木2-3木
その中でも、バイナリツリーと二分探索木は、最も一般的な木です。
頻繁にインタビューツリー構造に関するよくある質問:
高バイナリツリーは、k番目のバイナリ検索ツリーの中の最大値を見つけるためにkを見つけるためにルートノードからノードを二分木祖先ノードで指定されたノードを探し
トライ(トライ)
また、「プレフィックスツリー」として知られている辞書ツリーは、ツリーデータ構造の特殊な種類が文字列に関連する問題を解決するための非常に効果的です。それも、IPルーティングのために、自動的に検索エンジンでアドバイスを提供し、辞書内の単語を中心に探して、迅速な検索を提供します。
「トップ」のストレージの例は次の通りである、「そう」と「彼らの」辞書ツリー内の三つの言葉は次のとおりです。
トップを格納するように端部でこれらの単語、前記緑色ノード「P」、「S」および「R」は「従って」、それぞれボトム「トップ」を表し、「彼ら」。
頻繁に面接のトライに関するよくある質問
辞書ツリー内の単語の合計数を計算するプリント辞書ツリーに格納されたすべての単語の配列トライの要素に使用されるソート使用辞書トライからワードフォームをT9辞書(トライ+ DFS)を構築することを
ハッシュテーブル
哈希法(Hashing)是一个用于唯一标识对象并将每个对象存储在一些预先计算的唯一索引(称为“键(key)”)中的过程。因此,对象以键值对的形式存储,这些键值对的集合被称为“字典”。可以使用键搜索每个对象。基于哈希法有很多不同的数据结构,但最常用的数据结构是哈希表。
哈希表通常使用数组实现。
散列数据结构的性能取决于以下三个因素:
哈希函数哈希表的大小碰撞处理方法
下图为如何在数组中映射哈希键值对的说明。该数组的索引是通过哈希函数计算的。
面试中关于哈希结构的常见问题:
在数组中查找对称键值对追踪遍历的完整路径查找数组是否是另一个数组的子集检查给定的数组是否不相交
以上是在编程面试之前你应该知晓的八大数据结构。数据结构与算法,应对程序员面试,你必须知道的八大数据结构数据结构与算法,应对程序员面试,你必须知道的八大数据结构数据结构与算法,应对程序员面试,你必须知道的八大数据结构数据结构与算法,应对程序员面试,你必须知道的八大数据结构数据结构与算法,应对程序员面试,你必须知道的八大数据结构