40. 用栈实现队列
正如标题所述,你需要使用两个栈来实现队列的一些操作。
队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。
pop和top方法都应该返回第一个元素的值。
样例
比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2
挑战
仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(1)的
class MyQueue {
public:
MyQueue() {
// do intialization if necessary
}
/*
* @param element: An integer
* @return: nothing
*/
void push(int element) {
// write your code here
InputData.push(element);
}
/*
* @return: An integer
*/
int pop() {
// write your code here
if(OutputData.empty())
{
while(!InputData.empty())
{
OutputData.push(InputData.top());
InputData.pop();
}
}
int temp=OutputData.top();
OutputData.pop();
return temp;
}
/*
* @return: An integer
*/
int top() {
// write your code here
if(OutputData.empty())
{
while(!InputData.empty())
{
OutputData.push(InputData.top());
InputData.pop();
}
}
return OutputData.top();
}
private:
stack<int> InputData;
stack<int> OutputData;
};
////////////////////////////////////////////////////////////////
class MyQueue:
def __init__(self):
# do intialization if necessary
self.Input=[]
self.Output=[]
"""
@param: element: An integer
@return: nothing
"""
def push(self, element):
# write your code here
self.Input.append(element)
"""
@return: An integer
"""
def pop(self):
# write your code here
self.adjust()
return self.Output.pop()
"""
@return: An integer
"""
def top(self):
# write your code here
self.adjust()
return self.Output[-1]
def adjust(self):
if len(self.Output)==0:
while len(self.Input)!=0:
self.Output.append(self.Input.pop())