LeetCode-232-用棧實現(xiàn)隊列

題目描述:請你僅使用兩個棧實現(xiàn)先入先出隊列。隊列應(yīng)當(dāng)支持一般隊列支持的所有操作(push、pop、peek、empty):
實現(xiàn) MyQueue 類:
void push(int x) 將元素 x 推到隊列的末尾
int peek() 返回隊列開頭的元素
boolean empty() 如果隊列為空,返回 true ;否則,返回 false
說明:
你只能使用標(biāo)準(zhǔn)的棧操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的語言也許不支持棧。你可以使用 list 或者 deque(雙端隊列)來模擬一個棧,只要是標(biāo)準(zhǔn)的棧操作即可。
示例說明請見LeetCode官網(wǎng)。
來源:力扣(LeetCode) ??
鏈接:https://leetcode-cn.com/problems/implement-queue-using-stacks/ ??
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
解法一:雙棧實現(xiàn)隊列
MyQueue的2個棧分別為inStack和outStack,inStack用來入隊列,outStack用來出隊列,幾個方法的主要實現(xiàn)邏輯如下:
push(int x)
:將x入棧inStack。
pop()
:如果棧outStack不為空,直接從outStack中出棧一個;如果outStack為空,則如果inStack不為空,將inStack的全部元素出棧并且入棧outStack,然后從棧outStack中出棧一個,如果inStack也為空,則拋出異常該隊列為空。
peek()
:如果棧outStack不為空,返回outStack的棧頂元素;如果outStack為空,則如果inStack不為空,將inStack的全部元素出棧并且入棧outStack,然后返回outStack的棧頂元素,如果inStack也為空,則拋出異常該隊列為空。
empty()
:如果inStack和outStack都為空,返回true;否則返回true。
【每日寄語】 每天吃一顆糖,然后告訴自己:今天的日子,果然又是甜的。