LeetCode 232.用栈实现队列
题目链接:LeetCode 232.用栈实现队列
class MyQueue {
public:
stack<int> stIn;//设定进栈
stack<int> stOut;//设定出栈
MyQueue() {
}
void push(int x) {
stIn.push(x);//将元素放入进栈中
}
int pop() {
if(stOut.empty())//判定当出站为空时
{
while(!stIn.empty())//将进栈元素全部排出
{
stOut.push(stIn.top());//将进栈首元素放入出栈
stIn.pop();//进栈排出元素
}
}
int result = stOut.top();//将出栈首元素放入result中
stOut.pop();//排出出栈元素
return result;
}
int peek() {
int res = this->pop();//复用pop()函数,用this指针获取pop出的首元素
stOut.push(res);//再将该元素放入出栈
return res;
}
bool empty() {
return stIn.empty() && stOut.empty();
}
};
思路:不同于队列先进先出的原则,栈中的元素是先进后出;但利用两个栈(进栈和出栈),便可以实现元素排出顺序的改变。
小结:
1.在利用栈实现队列功能时,需要保证出栈为空时,才可将进栈元素放入出栈中;之后将元素放入出栈时,需要将进栈元素一次性放入出栈中。
2.在实现peek函数时,可以通过对pop函数复用实现。
LeetCode 225. 用队列实现栈
题目链接:LeetCode 225. 用队列实现栈
class MyStack {
public:
queue<int> que;//设定队列que
MyStack() {
}
void push(int x) {
que.push(x);//将元素插入队列中
}
int pop() {
int size = que.size();//计算队列元素总长度
size--;
while(size--)
{
que.push(que.front());
que.pop();
}//将除了队列最后一个元素的其余元素重新加入队列中,调整顺序
int res = que.front();
que.pop();
return res;
}
int top() {
return que.back();//队列的末尾元素即为栈的首元素
}
bool empty() {
return que.empty();
}
};
思路:在实现pop()函数时,通过将末尾元素之前的所有元素重新插入队列中以实现元素排除顺序的调整;实现top()函数时,因队列是先进先出的原则,而栈为先进后出,故仅需返回队列的末尾元素即为栈的首元素。