class MyStack {
public:
queue<int> queue1;//作为堆的主体
queue<int> queue2;
MyStack() {
}
void push(int x) {
queue2.push(x);
while (!queue1.empty())
{
queue2.push(queue1.front());//将1的头推入2
queue1.pop();//退出
}
swap(queue1, queue2);//估计是重载过的
}
int pop() {
int tmp = queue1.front();
queue1.pop();//推出
return tmp;
}
int top() {
return queue1.front();
}
bool empty() {
return queue1.empty();
}
};
通过解题的收获和思考
可以通过库函数定义队列(其他的应该也可以)
通过再public区域里面
queue<int>queue1; queue<int>queue2;
猜测:int是data的类型,如果有具体的QElemType结构体定义Data的类型的话可以替换
通过引用该库,可以使用该语句定义出queue(队列)
其基本操作有:(需要通过队列名进行引用)
push()从队尾插入
pop()从队头弹出
size()大小
empty()判断是否为空
front()读取队头
back()读取队尾
使用两个队列模拟(栈)
则将其中一个视作堆,另一个视作中转站
目标是push进去的元素排在队头
push进中转站,再把目标“堆”中的元素尽数排空到中转站中
再直接swap(队1,队2)
则队1就符合了