解题思路
- 两给队列实现一个栈, 一个作为主队列,一个作为辅助队列
- 保证辅助队列是空队列
class MyStack {
/*
栈是一种后进先出的数据结构,元素从顶端入栈,然后从顶端出栈。
队列是一种先进先出的数据结构,元素从后端入队,然后从前端出队。
*/
public:
//两给队列实现一个栈,定义两个队列
queue<int> queue1;
queue<int> queue2;
/** Initialize your data structure here. 初始化数据结构 */
MyStack() {
}
/** Push element x onto stack. 将 x 入栈*/
void push(int x) { //入栈
queue2.push(x); //把想要添加的数放进辅助队列中
while(!queue1.empty())//判断队列1是否为空
{
queue2.push(queue1.front());//队列1不为空的话将队列1首部的数依次取出放进队列2
queue1.pop();//队列1首部每取出一个数就剔除一个数
}
swap(queue1,queue2);
}
/** Removes the element on top of the stack and returns that element.移除并返回栈顶元素 */
int pop() {
int r = queue1.front();//拿到队列1的队顶元素
queue1.pop();//将拿到的队顶元素剔除
return r;//返回栈顶元素
}
/** Get the top element.返回栈顶元素 */
int top() {
int r = queue1.front();//拿到队列1的队顶元素
return r;//返回栈顶元素
}
/** Returns whether the stack is empty.判断栈是否为空 */
bool empty() {
return queue1.empty();//判断主队列是否为空即可
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
queue中的常用函数:
1. push() 在对队尾一个元素c++
2. pop() 拿出队列头的第一个元素
3. size() 队列中元素个数
4. empty() 判断队列是否为空
5. front() 返回队列第一个元素,与pop不同的是这里只是表示出来并没有剔除
6. back() 返回队列的最后一个元素