232.用栈实现队列
解法
c++
class MyQueue {
private:
//类的私有成员部分,它包含了两个堆栈(stack)对象:inStack和outStack。同时,类中还定义了一个私有成员函数in2out()。
stack<int> inStack,outStack;
//in2out()函数的作用是将inStack中的元素转移到outStack中
void in2out(){
while(!inStack.empty()){
//遵循队列先进先出原则
outStack.push(inStack.top());
inStack.pop();
}
}
public:
MyQueue() {
}
//将元素 x 推到队列的末尾
void push(int x) {
inStack.push(x);
}
//从队列的开头移除并返回元素
int pop() {
if (outStack.empty()) {
in2out();
}
int x = outStack.top();
outStack.pop();
return x;
}
//返回队列开头的元素
int peek() {
if (outStack.empty()) {
in2out();
}
return outStack.top();
}
//如果队列为空,返回 true ;否则,返回 false
bool empty() {
return inStack.empty() && outStack.empty();
}
};
225. 用队列实现栈
解法
2进queue2,queue1和queue2交换;
9进queue2,queue1的2添加在queue2的9的后面,queue1和queue2交换
python
class MyStack(object):
def __init__(self):
#初始化队列
#这行代码创建了一个空的双端队列(deque)对象,在Python中,collections.deque是一个双端队列的实现,它可以从两端高效地进行添加(append)和删除(pop)操作。
self.queue=collections.deque()
def push(self, x):
"""
:type x: int
:rtype: None
"""
#求队列长度
n=len(self.queue)
#首先将新元素x添加到队列的末尾,然后通过循环将队列中除了新元素之外的所有元素逐个取出,再添加到队列的末尾
self.queue.append(x)
for _ in range(n):
#self.queue.popleft(),取出队列的头部元素;从队列的左端(即队列的头部)移除并返回一个元素a[b]->ba ba[c]->cba
self.queue.append(self.queue.popleft())
#取出头部元素,并移除
def pop(self):
"""
:rtype: int
"""
return self.queue.popleft()
#取出头部元素
def top(self):
"""
:rtype: int
"""
#感觉像数组
return self.queue[0]
def empty(self):
"""
:rtype: bool
"""
#空为false,故加一个not
return not self.queue
c++
class MyStack {
//方法1 用队列实现栈(先入后出)
//你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
public:
//定义两个队列,queue1存栈内元素,queue2辅助队列
queue<int> queue1;
queue<int> queue2;
MyStack() {
}
//将元素 x 压入栈顶。
void push(int x) {
queue2.push(x);
while(!queue1.empty()){
queue2.push(queue1.front());
queue1.pop();
}
swap(queue2,queue1);
}
//移除并返回栈顶元素
int pop() {
int x =queue1.front();
queue1.pop();
return x;
}
//返回栈顶元素
int top() {
int r = queue1.front();
return r;
}
//如果栈是空的,返回 true ;否则,返回 false
bool empty() {
return queue1.empty();
}
};