いいえ、スタックの一番上に個々の要素を複製する方が理にかなっています。「一番上の要素を印刷する」は、単数形の「一番上の要素を印刷する」べきだったタイプミスだと思います。
これがはるかに可能性の高いケースである理由は、「トップ要素」を印刷するだけでは意味がないためです。最上位の要素以外のスタックのサブセットである場合は、カウントを指定する必要があります (そうではありません)。または、それがすべてを意味する場合は、「最上位」修飾子はまったく必要ありません。
つまり、この場合の主語「it」は、「スタック」ではなく「スタックの一番上の要素」を指します。
したがって、スタックが次の場合:
[1,2,3,4,5]
プッシュされた最初の要素であり、1
最後の5
要素であるため、複製すると次のようになります。
[1,2,3,4,5,5].
push
基本的な操作があり、既にあると仮定すると、現在の要素数とスタックの最上位要素をそれぞれ取得するとpop
を追加する必要があります (基本的には aですが、削除することはありません)。count
peek
pop
残りのコードは、次のような基本的な操作 (疑似コード) から構築できます。
def printTop(stack):
print stack.peek()
def duplicateTop(stack):
stack.push(stack.peek())
def swapTopTwo(stack):
one = stack.pop()
two = stack.pop()
stack.push(one)
stack.push(two)
def clear(stack):
while stack.count() > 0:
junk = stack.pop()
基本的な操作を呼び出すよりも強力であると仮定して関数を作成すると、効率が向上する可能性がありますが、これはおそらくそれらを実装する最も簡単な方法です。たとえば、swapTopTwo
ポップしてプッシュするのではなく、2 つの要素をその場で交換するだけで済みます (_
以下の で始まる変数は実装の内部です)。
def swapTopTwo(stack):
if stack._count < 2: raise error
temp = stack.data[_count - 2]
stack.data[_count - 2] = stack.data[_count - 1]
stack.data[_count - 1] = temp