题目描述

代码解决
class MyQueue { public:stack<int> stIn; // 输入栈,用于push操作stack<int> stOut; // 输出栈,用于pop和peek操作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(); // 取输出栈的顶部元素stOut.pop(); // 弹出输出栈的顶部元素return result; // 返回弹出的元素}int peek() {// 如果输出栈为空,则将输入栈的元素转移到输出栈if(stOut.empty()){while(!stIn.empty()){stOut.push(stIn.top()); // 将输入栈的顶部元素压入输出栈stIn.pop(); // 弹出输入栈的顶部元素}}return stOut.top(); // 返回输出栈的顶部元素(不弹出)}bool empty() {return stIn.empty() && stOut.empty(); // 判断输入栈和输出栈是否都为空} };
类
MyQueue有两个私有成员变量:stIn和stOut,分别用于存储入队和出队的元素。构造函数
MyQueue()没有参数,它只是初始化了两个栈。
push(int x)方法用于将元素x入队。它将元素x压入stIn栈。
pop()方法用于出队,并返回队首元素。如果stOut栈为空,说明队列中没有元素可以出队,因此需要将stIn栈中的元素全部移到stOut栈中。这可以通过一个循环来实现,每次将stIn栈的顶部元素移到stOut栈中,然后出栈。最后,返回stOut栈的顶部元素。
peek()方法用于查看队首元素,但不将其出队。它与pop()方法类似,但是不将队首元素出队,而是返回它。
empty()方法用于判断队列是否为空。如果stIn栈和stOut栈都为空,则返回true;否则返回false。