web-dev-qa-db-ja.com

単一アレイで3つのスタックを実装するアプリケーション

まあ、単一の配列に3つ(または2つのスタック)を実装することについては多くの議論があります。しかし、そのようなスタックを実装するための本当の必要性またはアプリケーションはどうですか?

メモリを3つの個別のスタック[配列]として割り当てることはできませんか?とにかく、array[size * 3]その単一の配列で。

いくつかを説明するいくつかのリンク:

3
Dineshkumar

インタビューの質問の多くは、実際的な目的を果たしません。彼らはあなたが難しいことを自分のやり方で考えることができるかどうかを確認するための挑戦です。それらを尋ねる人々は、彼らがコーディングで本当に短時間で説明できない本当に難しい課題の代用として役立つと信じています(そして、その解決策をそれほど迅速に評価することもできません)。

物理学には、「建物の高さを気圧計でどのように測定しますか?」という話があります。 「正しい」答えは、上部と下部の気圧を測定し、数式を適用することです。私のお気に入りの「間違った」回答には、上から落とす、地面に落ちるまでの時間を測定する、式を適用する、または建築家/管理人/所有者を探して取引を提供することが含まれます。これをあげますその建物の高さを教えてくれるなら、高価な気圧計です。

質問の要点は、人々が気圧計で高さを定期的(またはこれまで)に測定する必要があるということではなく、候補者が気圧と高さの式を知っているかどうかを確認することでした。同様に、あなたの質問は、メモリを管理する方法、奇妙な制約を処理するための単純なアプローチ(スタック)を再構築する方法を知っているかどうかをテストし、アイテムをスタックからスタックに移動せず、リンクを更新するなどの賢いことを考えます。現実の世界で発生する「各スタックには最大100万個のアイテムが含まれる可能性がありますが、他のスタックが大きくなると、合計スペースが変更されない」などの奇妙なEdgeケースが存在する可能性がありますが、それが理由です問題を解決するため。

4
Kate Gregory

単一の(リンクされたリスト)配列に複数のスタックを実装すると、メモリをより効率的に使用できます。

3つの別々の配列に3つのスタックがある場合、それぞれに将来の要素を考慮して事前に割り当てられたスペースが必要であり、それぞれがいっぱいになった場合は新しいメモリを割り当てる必要があります。それらを1つの配列に結合すると、将来の操作のために事前に割り当てられる「追加」メモリの量が減り、新しいメモリの割り当て回数を減らす必要があります。

ただし、単一の配列内のスタックも管理が複雑になります。 3つのスタックの要素が相互に散在します。要素が1つのスタックから削除されると、ギャップが残る場合があります。その後、新しい要素を追加するときに、これらのギャップを検索して埋められるようにする必要があります。

最近一般的に利用可能なメモリの量では、この方法でスタックを組み合わせるのはかなり極端な最適化になります。こうすることをめったに考えないでしょう。ただし、場合によっては役立つことがあります。

pdate:これは、特定の特殊なケースで最も役立ちます。スタック間で要素を頻繁に移動する状況では、スタックを単一の配列に格納する方が効率的です。要素XをスタックAからスタックBに移動するには、リンクを変更するだけで済みます。

1
user82096