2017-12-13 13 views
0

シングルスタックを使用してキューを実装するようにインタビューで頼まれましたが、できましたが、yieldを使用しても同じことが達成できるかどうかは分かりませんでした?C#で単一スタックを使用してキューを実装するためにyieldを使用できますか

+1

yieldは構文的な砂糖であり、アルゴリズムの概念ではありません(あなたはいつもyieldなしで列挙を書き直すことができます)。あなたがその問題をどのように解決したかについてあなたがアイデアを出したなら、助けになるでしょう。私は、同じサイズの第2のメモリ構造を持たないスタックを反転させる方法(タスクに必要な)をすぐに考えることができません。 – PMF

+0

追加:ここにはたくさんの回答があります(例:https://stackoverflow.com/questions/69192/how-to-implement-a-queueusing-two-stacks?rq=1)。 2つのスタックを使用してキューを実装するにはどうすればよいですか? – PMF

+1

@PMFこの質問をする人は、通常、再帰を使用するのを待ちます。もちろん、スタックされたコールスタックと同じサイズで、ポップされたアイテムを第2のメモリ構造に格納します。 – Evk

答えて

0

上記のコメントに基づいて、私はいいえと言います。の1つのスタックを使用することはできません。

OPが述べるように、彼はスタックを逆にするために再帰を使用しました(その底を取得してください)。これは基本的に、ランタイムスタックが2番目のスタックとして使用されるため、2つのスタック(How to implement a queue using two stacks?)を使用してキューを実装することを求める質問で解決策として与えられているものと同じです。

反復を使用する反復メソッド(理論計算機科学の書籍を参照してください)はいつでも書き換えることができますが、これは、同じタスクの別のデータ構造が必要になるため、このタスクの解決には禁止されていますデータを保持するためのサイズ。歩留まりを利用できるようにするには、反復処理を使用する必要があります。

+0

これは黙っているので、常に1つの値を持つ 'IEnumerable'を返すことができます。' yield returns'を一度行うだけです。そしてそれを再帰的に呼び出します。 – Evk

+0

ちょうど面白いことに、再帰的なものが必要です.Ackermanの機能をチェックしてください。 – Dave

+0

同じ質問が表示された場合、この状況で私は何をすべきですか? 実行時に新しいスタックを作成するという要点を得ましたが、それ以外の場合は満足できる回答を与える必要があります。私は仕事を得るチャンスを失いますので、アドバイスをお願いします。 –

関連する問題