2016-05-25 5 views
0

私はスタックが初めてです。わかっているように、スタックに十分な領域がなく、要素をスタックにプッシュしたい場合、スタックはオーバーフロー状態になります。これは、配列の容量を定義する必要があるため、スタックの配列ベースの実装を使用するときに発生します。容量を超える要素をプッシュしたい場合は、オーバーフローが発生しますが、リンクリストをスタック実装に使用すると、スタックオーバーフローがどのように発生しますか?リンクリストでは、容量を定義しないで、ノードに動的にメモリを割り当てます。問題を認識できるように助けてください。前もって感謝します。スタック実装にリンクリストを使用すると、スタックオーバーフローはどのように発生しますか?

答えて

0

リンクされたリストでは、要素数の点で容量を定義する必要はありません。しかし、要素にはまだメモリが必要であり、メモリが枯渇する可能性があります。

異なる実装のメモリチャンクをスタックに割り当てる必要があると考えると、スタック実装をリストとして実行するとパフォーマンスが低下します(割り当て/割り当て解除が頻繁に行われるため)。スタックは非常に広範囲に使用されているため、実装の速度が遅くなるとおそらく禁止されます。

また、リストの管理は難しく、スタックを管理する必要があります。一度に1つ以上の要素を追加するか、または1つの操作でスタックを「短くする」(関数呼び出しから戻ったときなど、複数の要素を取る/忘れる)など単方向のリストは、終わり。

解決する問題はありますか?スタックオーバーフローは、大きなデータ構造が作成されるだけでなく、再帰が深すぎると発生する可能性があることに注意してください。

+0

いいえ、私の好奇心。しかし、リンクされたリストが遅い場合は、スタックを実装するのに完璧なものになります。 – user2779650

0

リンクリストを使用することをお勧めします。リンクされたリストにスタックオーバーフローはありません。そのため、リスト、スタックなどの配列実装ではなく、そのデータ構造を使用しています。 Linkedリストの実装は時間がかかります(ただし、事前定義されたライブラリを使用できます)。しかし、上記のようにのノードに動的にメモリを割り当てることは、のプロパティを持っているため、動的サイズのデータ​​を保持するのに適しています。
これが役立つことを願っています!

+0

ありがとう@Rahal。つまり、リンクされたリストを使用すると、スタックオーバーフローは発生しません。 – user2779650

+0

@ user2779650:はい、そうです –

関連する問題