データ構造学習ノート-----スタック

スタックの入力シーケンスが 1、2、3、...、n で、出力シーケンスの最初の要素が i の場合、最初の出力要素が n であるように、出力シーケンスの結果は 1 つだけではありません。出力シーケンスは一意ではないため、i 番目の出力要素が何であるかを判断するのは困難です。

2 つのスタックはスペースを共有します。これは、配列を使用して 2 つのスタックを格納することを指します。一方のスタックの底部を配列の先頭とし、もう一方のスタックの底部を配列の末尾とし、2 つのスタックは先頭から始まります。各スタックの一番下から配列の最後まで。中央の拡張子。配列 A のサイズを s とすると、次の図に示すように共有スタックを構築できます。

このうち、スタック 1 の底部は添字 0 で最後に固定され、スタック 2 の底部は添字 StackSize-1、つまり s-1 で最後に固定され、top1 と top2 はスタックの先頭ポインタになります。それぞれ1とスタック2。スタックのサイズが配列全体のスペースであることを確認するのは難しくありません。
スタック 1 が空であるという条件は、top1=0、スタック 2 が空であるという条件は、top2=StackSize-1、この質問は s-1、スタックがいっぱいであるという条件は、top2=top1+1 です。


以下の図からわかるように、共有スタックによりストレージ スペースがより効率的に使用されます。また、2 つのスタックは相互に調整することができ、top2=top1+1 の場合にのみ要素が配列のすべての領域を占有し、スタック オーバーフローが発生します。したがって、スタックを共有すると、オーバーフローが発生する可能性が低くなります。ただし、スタック アクセスの時間計算量は O(1) であり、アクセス時間は短縮されません。

おすすめ

転載: blog.csdn.net/qiaoqi17/article/details/108074889