示例 1:
我的思考
對於這種需要根據一種型別資料結構設計另外一種型別資料結構的情況,經常會去設計基礎的資料結構。這個題也是,一開始設計棧
類,定義入棧、出棧操作。在定義佇列類的時候使用棧類。
其實不必實現定義,只需假定有這些操作就可以。
我的解答
棧是先進後出的資料結構,佇列是先進先出。
定義兩個棧,s1和s2.
class
cqueue
:def
__init__
(self)
: self.s1 =
self.s2 =
def(self, value:
int)
->
none
:return
none
defdeletehead
(self)
->
int:
iflen
(self.s1)==0
:return-1
# s1入棧,出棧時才使用時
while
len(self.s1)
>0:
-1))
result = self.s2.pop(
)while
len(self.s2)
>0:
-1))
return result
網友解法
class
cqueue
:def
__init__
(self)
: self.s1 =
self.s2 =
def(self, value:
int)
->
none
:return
none
defdeletehead
(self)
->
int:
ifnot
(len
(self.s1)
orlen
(self.s2)):
return-1
ifnot
len(self.s2)
: self.s2=self.s1[::
-1] self.s1=
return
(self.s2.pop(-1
))
劍指 Offer 09 用兩個棧實現佇列
劍指 offer 09.用兩個棧實現佇列 示例 1 輸入 3 輸出 null,null,3,1 示例 2 輸入 5 2 輸出 null,1,null,null,5,2 上大二時候就學的老經典了。思路 宣告兩個棧s1,s2。入佇列操作等同於入棧s1。出佇列操作分三種情況 1.兩個棧都為空,意味著隊列為...
劍指offer 09 用兩個棧實現佇列
示例 1 示例 2 這個地方有點繞,需要注意的是 當stack2不為空時,佇列中的元素都在stack2中 stack2中都是待刪除的元素 無論stack1中是否有元素都從2中彈出元素 頻繁的插入和刪除首選linkedlist,通常情況下不推薦使用vector和及其子類stack class cque...
劍指 Offer 09 用兩個棧實現佇列
該題使用兩個棧,乙個用於存資料,乙個用於取資料,而棧的思路是後進先出,佇列的思路是先進先出,所以需要在插入資料時將所有資料放入a棧,如果此時需要取出資料,那麼就將a內的資料都pop到b中去,假如現在我們插入了 1,2,3 到a中,那麼此時呼叫取資料的函式,將會把資料轉存到b中,b中的資料就為 3,2...