劍指offer 兩個棧實現佇列

2021-10-02 17:30:46 字數 1379 閱讀 5002

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

思路:佇列:先進先出

棧:先進後出

基於兩種資料結構的特性,可使用兩個棧不斷交換資料,如:stack1儲存佇列的元素,stack2為空,如果直接使用stack1彈出,將彈出的是佇列尾部元素,不符合佇列結構,因此採用stack2做為過渡,步驟如下:

1、假設佇列元素為1,2,3,4,隊首為1,將stack1元素移到stack2後,stack1為空,stack2長度為4,此時佇列的隊首1即為stack2棧尾,直接彈出1即實現佇列的pop操作

2、stack2為4,3,2,將satck2中的元素依次放入stack1中,然後同步驟1,在將stack1中的元素移入stack2,彈出棧尾元素,如圖

3、以此類推,直到stack1為空

**實現

#!/usr/bin/env python

# _*_ coding:utf-8 _*_

# -*- coding:utf-8 -*-

class

solution

:def

__init__

(self)

: self.stack1 =

self.stack2 =

defpush

(self, node)

:# write code here

defpop

(self)

:# return xx

if self.stack1:

for i in

range

(len

(self.stack1)):

))pop_node = self.stack2.pop(

)for i in

range

(len

(self.stack2)):

))return pop_node

else

:return

none

if __name__ ==

'__main__'

: s = solution(

) s.push(1)

s.push(2)

s.push(3)

print

(s.pop())

print

(s.pop())

print

(s.pop(

))

劍指offer 兩個棧實現佇列

使用兩個棧實現乙個佇列。棧是先進後出,佇列是後進先出。如果只有乙個棧那麼是無法實現佇列的,但是兩個棧完全可以。如下 templateclass cqueue templatet cqueue deletehead if stack2.size 0 throw queue is empty t ret...

劍指offer 兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。棧的特點是先入後處,先出。而佇列的特點是先入先出,後出。所以我們整兩個棧,入棧的時候入第乙個。出棧的時候如果另外乙個非空,則優先處理另乙個。如果空的話,把所有的元素再 先出的放到另一棧裡,負負得正,得到了佇列的效果。c...

劍指offer 用兩個棧實現佇列

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...