使用棧實現(xiàn)隊列的下列操作:
- push(x) – 將一個元素放入隊列的尾部。
- pop() – 從隊列首部移除元素。
- peek() – 返回隊列首部的元素。
- empty() – 返回隊列是否為空。
說明:
你只能使用標準的棧操作 – 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的語言也許不支持棧。你可以使用 list 或者 deque(雙端隊列)來模擬一個棧,只要是標準的棧操作即可。
假設所有操作都是有效的 (例如,一個空的隊列不會調(diào)用 pop 或者 peek 操作)?!?gt;判斷代碼健壯性
思路
這道題考察的就是對棧和隊列的掌握程度。
使用棧來模式隊列的行為,如果僅僅用一個棧,是一定不行的,所以需要兩個棧一個輸入棧,一個輸出棧,這里要注意輸入棧和輸出棧的關系。
在push數(shù)據(jù)的時候,只要數(shù)據(jù)放進輸入棧就好,但在pop的時候,操作就復雜一些,輸出棧如果為空,就把進棧數(shù)據(jù)全部導入進來(注意是全部導入),再從出棧彈出數(shù)據(jù),如果輸出棧不為空,則直接從出棧彈出數(shù)據(jù)就可以了。
最后如何判斷隊列為空呢?如果進棧和出棧都為空的話,說明模擬的隊列為空了。
代碼
注意一些細節(jié):文章來源:http://www.zghlxwxcb.cn/news/detail-723043.html
- 判斷棧是否為空,才能夠進行有效操作
- pop時候的復雜性
- peek復用pop后需要把元素加回去
class MyQueue(object):
def __init__(self):
"""
in 主要負責push out主要負責pop(用棧實現(xiàn)隊列 必然是要用到兩個棧)
"""
self.stack_in = [] # python中沒有棧這個數(shù)據(jù)結構 用列表代替
self.stack_out = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
# 新元素進來就往 in 中加入
# 在push數(shù)據(jù)的時候,只要數(shù)據(jù)放進輸入棧就好
self.stack_in.append(x)
def pop(self):
"""
:rtype: int
"""
# 在pop的時候,操作就復雜一些,輸出棧如果為空,就把進棧數(shù)據(jù)全部導入進來(注意是全部導入),
# 再從出棧彈出數(shù)據(jù),如果輸出棧不為空,則直接從出棧彈出數(shù)據(jù)就可以了。
# 從隊列首部移除元素
if self.empty():
return None
if self.stack_out: # stack_out中有元素
return self.stack_out.pop() # 這里用return 既可以
else:
for i in range(len(self.stack_in)):
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
def peek(self):
"""
:rtype: int
"""
ans = self.pop() # 代碼 函數(shù)復用
self.stack_out.append(ans) # 因為只是返回元素 所以采用pop刪除之后(代碼復用)還需要再加回去
return ans
def empty(self):
"""
:rtype: bool
"""
return not (self.stack_in or self.stack_out)
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
參考:https://www.programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html文章來源地址http://www.zghlxwxcb.cn/news/detail-723043.html
到了這里,關于(※)力扣刷題-棧和隊列-用棧實現(xiàn)隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!