题目:用两个栈实现一个队列。队列的声明如下,请实现他的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能
在完成代码之前应该想清楚测试用例:
1,在空的队列(栈)里添加删除元素。
2,往非空的队列(栈)里添加删除元素。
3,连续删除元素直至队列(栈)为空。
两栈实现队列:
#include<iostream>
#include<stack>
using namespace std;
template<typename T>
class MyQueue
{
public:
void push(int node)
{
stack1.push(node);
}
int pop()
{
if (stack2.size() <= 0)
{
while (!stack1.empty())
{
int node = stack1.top();
stack1.pop();
stack2.push(node);
}
if (stack2.size() == 0)
{
cout << "queue is empty" << endl;
}
int ret = stack2.top();
stack2.pop();
return ret;
}
}
private:
stack<T> stack1;
stack<T> stack2;
};
//测试用例:查看出队列元素是否为第一次进去的。
int test3()
{
MyQueue<int> qu;
qu.push(1);
qu.push(2);
qu.push(3);
qu.push(4);
qu.push(5);
int ret = qu.pop();
cout << ret << endl;
return 0;
}
两队列实现栈:
class Stack
{
public:
void push(const T& data)
{
qu1.push(data);
}
T pop()
{
if (qu1.size()==0)
{
throw new exception("the stack is empty");
}
T temp;
while (!qu1.empty())
{
temp = qu1.front();
qu1.pop();
if (!qu1.empty())
{
qu2.push(temp);
}
}
swap(qu1, qu2);
return temp;
}
private:
queue<T> qu1;
queue<T> qu2;
};
int main()
{
Stack<int> st;
st.push(1);
st.push(2);
st.push(3);
cout << st.pop() << endl;
cout << st.pop() << endl;
cout << st.pop() << endl;
cout << st.pop() << endl;
return 0;</span>
}
当栈为空时无法执行pop()操作,随即抛出异常。