データ構造のリンクリストがある場合、スタック、キュー、デキューのクラスを作成する理由はわかりません。リンクリストはスタックとキューの両方として機能することができます(そして単にではなくても常に両方の機能を持っているため)別の名前が付けられます)。
これで私の質問が出てきます
読みやすさの他に、リンクリストでスタックとキューを使用する必要がある特定の理由はありますか?
最後の一口、私はJavaと.Netでプログラムします
スタックとキューは、連続したメモリを操作する方法です。リンクされたリストはそうではありません。確かに、ある構造で解決できる問題は別の構造で解決でき、その違いを十分に理解できないほど抽象化する必要があります。それで、本当の違いは何ですか?パフォーマンス。これらの構造のどちらを選択するかは、それらがうまく機能しないため、それらを使用して行わないことです。
リンクリストを使用すると、中間に簡単に挿入できます。トラバースが困難になります。
スタックとキューは、最後に挿入と削除を行うことを好みます。
構造全体を再構築できるので、何もできないことはありません。問題は、発生するコストです。
途中で私を助けた1つのことは、この小さな男です:
以下は、あまり一般的でない構造を含むものです。
内部的には、ランダムアクセスメモリと呼ばれる1つの大きな配列です。これらの構造を使用しても、それは変わりません。しかし、必要のないものを予測できる場合は、そのメモリを非常にうまく使用するのに役立つ適切な構造を選択できます。
私は愛してる CandiedOrange's
キューまたはスタックは、リンクされたリスト、展開されたリンクされたリスト、または完全に連続した配列表現などを使用して実装できますが、.
しかし、私は心から同意し、反響し、デザインが本当にlessを実行している部分に精通したいと思います。ミニマリズムは、デザインを誤用する方法が少ないことから、効率的に実装する余地を提供することまで、特定のデザインを使用するコードで要件をより適切に表現することまで、あらゆる種類の方法でデザインにとって非常に有益です(わかりにくいもの)あなたのコードの読者があなたがやろうとしていることではないすべてのこと)。
LIFOスタックとFIFOキューは通常、たとえば、二重にリンクされたリストよりも機能が少なく、デザインがまったく劣ることはありません。多くの場合、それらは優れたものになる可能性があります。そして、それは現実世界の有形のオブジェクトにも当てはまります。たとえば、誰かが尋ねる場合があります:「なぜこれらの1つを使用するのですか?」?
... "これらのいずれかを持っている場合?"
この場合、それはかなり明白なはずです。しかし、それはソフトウェアのデザインにも当てはまります。より多くを行うことは、必ずしも上司と同等ではありません。毎日の効率に関しては、常に最先端のアルゴリズムと並列化されたベクトル化されたコードを使用することは必ずしも重要ではありません。時々、それはあなたが必要のないものにお金を払っていないことを確認することだけについてです。必要以上のデザインを使用すると、多くの場合、そのようなコストが発生します。たとえば、刺身を切るための鋭利なナイフだけが必要な場合は、上記のマルチツールのようになります。
そして当然のことながら、設計要件を明確に述べて「刺身を切るための鋭利なナイフだけが必要です」と言うと、実装者は、その狭いセットのセットに対して、はるかに効率的で信頼性の高い実装を短時間で思いつくことができます。 「うーん、何が必要かわからない。ここに私が必要とするかもしれないし、必要としないかもしれないもののすべての可能性のリストがある」というよりも必要なのです。そして、当然、あなたが寿司ナイフを持ち歩いているのを見た場合、マルチツールを持ち歩いている場合よりも、魚をさいの目に切って自分の意図を理解しているのではないかと簡単に推測できます。
キューまたはスタックを使用して@rwongコメントをエコーする