两个队列实现一个栈
题目描述
用两个队列实现一个栈。栈的声明如下,请实现它的函数 push ,top, pop 和empty,分别完成在栈顶插入整数,在栈顶读取整数,在栈顶删除整数和判空的功能。
解题思路
总结:入数据时先入队qu1,在判断qu2是否为空,(若不为空就将qu2的数据全部入队到qu1中),接着交换qu1和qu2队列,让qu1队列永远为空
代码实现
#include <iostream>
#include<queue>
using namespace std;class MyStack
{std::queue<int>* qu1;std::queue<int>* qu2;
public:MyStack(){qu1 = new queue<int>;qu2 = new queue<int>;}~MyStack(){delete qu1;delete qu2;qu1 = nullptr;qu2 = nullptr;}void push(int x){qu1->push(x);while (!qu2->empty()){qu1->push(qu2->front());qu2->pop();}queue<int>* tmp = qu1;qu1 = qu2;qu2 = tmp;}int pop(){int val = qu2->front();qu2->pop();return val;}int top(){return qu2->front();}bool empty(){return qu2->empty();}};int main()
{MyStack st;int i = 1;printf("入栈:");for (i; i <= 5; i++){st.push(i);printf("%d ",i);}printf("\n\n");printf("出栈:");while (!st.empty()){printf("%d ", st.top());st.pop();}printf("\n");return 0;
}
结果演示