【剑指offer】两队列实现栈与两栈实现队列

来源:互联网 发布:淘宝怎么删除下架宝贝 编辑:程序博客网 时间:2024/05/23 17:13

题目:用两个栈实现一个队列。队列的声明如下,请实现他的两个函数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()操作,随即抛出异常。

0 0
原创粉丝点击