2016-11-20 4 views
0

このコードはhackerrank.comからのものです。キューのピープ機能が最後のアイテムを削除して追加するのはなぜですか?

def pop(self): 
    #looks at the top of the queue 
    if len(self.stack2) > 0: 
     top = self.stack2.pop() 
     self.stack2.append(top) 

誰かがスタック/キューの最後の項目をポップしてから追加する理由を説明できますか?私は待ち行列で考えました、それは最初に最初です。その場合、キューの「トップ」アイテムはself.stack2.pop(0)である必要がありますか?

+0

は、実装の残りの部分が何であるかに依存しますやって例えば、新しい要素をリストの先頭に追加し、最後から 'pop'pingで読むキューを実装することができます。 – Batman

答えて

1

あなたはthisコードを参照している場合:

def peek(self): 
    if len(self.stack2) > 0: 
     top = self.stack2.pop() 
     self.stack2.append(top) 
    else: 
     while(len(self.stack1) > 1): 
      self.stack2.append(self.stack1.pop()) 
     top = self.stack1.pop() 
     self.stack2.append(top) 
    return top 

...その後手がかりは名である:問題の2行は変数に格納、self.stack2の上から値をポップtopスタックをスタックの一番上に戻して、スタックが変更されないようにし、値をメソッドの最後の行に返すことができます。そのため、名前を「peek」とし、「何かを恒久的に変更することなくスタックのトップ値を調べる」のようにします。

peek()else句を含むコードの残りの部分は、二スタックキューの古典的な実装である、ここでは詳細に説明した:

https://stackoverflow.com/a/39089983

+0

なぜ、top = self.stack2 [-1]なのか、popの代わりにスタックの先頭を見つけ出すために使うことができないのですか? – jessibird

+1

[練習](https://www.hackerrank.com/challenges/ctci-queue-using-two-stacks)は、2つの[スタック]を使用してキューを実装することである(https://en.wikipedia.org/wiki/Stack_(abstract_data_type))著者が使用しようとしたので、唯一の2つの操作がスタックのために利用可能であることが保証:彼らは間違いなくもで少しだまさが、Pythonのリストで 'append'呼ば' push'()と 'pop'( 'len'を使って)。 –

関連する問題