2016-07-27 4 views
0

だから私はベクトルまたは配列を使用して、スタックやキューを実装するこれらの性質を持っていることを知っている:配列やベクトルの実装ではなく、リンクリストを使ってスタックやキューを実装するのはなぜですか?

  • O(n)は、少なくとも配列の実装(すべてのスタックではなくヒープ上の)
  • を検索するには
  • O(1)バックPEEKトップ/フロントまたは/ボトム

と配列のスペース制約を使用すると、ベクターを用いて、スタックやキューを実装し、問題があれば、なぜ誰もが使用してこれらのデータ構造の1つを実装しリンクリスト?実際の人生の例は素晴らしいですし、配列/ベクトルの実装と異なる場合、いくつかの基本的な機能のBig O表記です。

+0

'LinkedList'は、Javaでのキューです、そしてあなたは、動的に成長する能力をしたい場合は、配列の上にそれを使用したい場合があります。 –

+0

動的に拡張したい場合は、ベクトルを使用してキューまたはスタックを実装しただけではできませんか?すみません、私はC++の方に向いていました。(自分のスタックやキューを一から作る) –

答えて

1

キューの場合、キューの中央(追加/削除)のデータを操作すると、リンクされたリストにより高速な結果が得られます。O(1)。配列やベクトルで実装されている場合は、新しい要素の領域を作成するために他の要素を移動するか、削除された要素の領域を埋める必要があるため、O(n)になります。

は限りスタックとして、私はこの答えにあなたを参照してください。Linked list vs. dynamic array for implementing a stack

+0

ありがとう、私はスタックの記事を読んでいます。しかし、キューの途中に挿入する必要はないので、キューはFirst-In-First-Outアルゴリズムになっているはずです。何かがあれば、バックまたはフロント "Deque"に挿入できます。あなたがinsertbeforeLast、insertBeforeIndexなどのような他の機能を追加し始めると、それは一般的なリンクリストになります。 –

+0

私の回答に実装例は含まれませんでした。優先度キューの場合は、キューの中央を操作する必要があります。優先度の高い要素は、優先度の低い要素の前に追加する必要がありますが、優先度の高い要素の後ろに追加する必要があります。また、現実世界では、人々はキューから脱落する可能性があるので、キューの途中で削除が必要になることがあります。 – alexscasa

+0

ああ、優先待ち行列!素晴らしい例ですが、索引などのすべてのシフトに対処するのではなく、リンクリストを使用してこれを実装することは完全に理にかなっています。ありがとうございました! –

関連する問題