题目描述
代码解决
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
。