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