C++笔试题(剑指offer 面试题7 两个栈实现队列)
2017-12-20 15:34
369 查看
#ifndef F_FIND_WORK_TEST6_TWO_STACK_TO_QUEUE_20171219_JHASKDFJHASF_H_ #define F_FIND_WORK_TEST6_TWO_STACK_TO_QUEUE_20171219_JHASKDFJHASF_H_ #include <stdio.h> #include <stack> /* 剑指offer 面试题7 (P59) 两个栈实现队列,队列的声明如下,请实现它的两个函数 AddData和DeleteData,分别实现在队列尾部增加数据,在头部删除数据功能 1)栈(stack):后进先出 2)队列(queue):先进先出 3)stackA:用于存储数据 4)stackB:用于满足临时操作数据。 5)操作前,将数据存储于stackA 6)操作时,将数据从stackA移入stackB,对stackB做删除等操作 7)操作后,将数据从stackB移入stackA. */ template<class T> class F_StackToQueue { public: F_StackToQueue(); ~F_StackToQueue(); public: //! 增加数据 BOOL AddData(const T &tData); //! 删除数据 T DeleteData(); //! 获取数据长度 int GetDataSize(); //! 获取数据 T GetData(); private: //! 存储数据 stack<T> m_sStackA; //! 处理操作的数据 stack<T> m_sStackB; }; template<class T> F_StackToQueue<T>::F_StackToQueue() {} template<class T> F_StackToQueue<T>::~F_StackToQueue() {} template<class T> BOOL F_StackToQueue<T>::AddData(const T &tData) { m_sStackA.push(tData); return TRUE; } template<class T> T F_StackToQueue<T>::DeleteData() { //如果m_sStackB中没数据,则从m_sStackA中数据移入 if(m_sStackB.empty()) { while (m_sStackA.size()>0) { T tTempData = m_sStackA.top(); m_sStackA.pop(); m_sStackB.push(tTempData); } } if(m_sStackB.empty()) { TRACE("当前为空链表"); return NULL; } T tDeleteData = m_sStackB.top(); m_sStackB.pop(); return tDeleteData; } template<class T> int F_StackToQueue<T>::GetDataSize() { return m_sStackA.size() + m_sStackB.size(); } //获取数据 template<class T> T F_StackToQueue<T>::GetData() { if(m_sStackB.empty()) { while (m_sStackA.size()>0) { T tTempData = m_sStackA.top(); m_sStackA.pop(); m_sStackB.push(tTempData); } } if(m_sStackB.empty()) { TRACE("当前为空链表"); return NULL; } return m_sStackB.top(); } //测试:两个栈实现队列 void F_Test6_TwoStackToQueue() { F_StackToQueue<int> qTest; qTest.AddData(1); qTest.AddData(2); qTest.AddData(3); qTest.AddData(4); int nTest(0); nTest = qTest.DeleteData(); //1 nTest = qTest.DeleteData(); //2 qTest.AddData(8); nTest = qTest.DeleteData(); //3 nTest = qTest.DeleteData(); //4 nTest = qTest.DeleteData(); //8 nTest = qTest.DeleteData(); //0 nTest = qTest.DeleteData(); //0 qTest.AddData(12); nTest = qTest.DeleteData(); //12 qTest.AddData(92); nTest = qTest.GetData(); //92 nTest = qTest.DeleteData(); //92 nTest = qTest.GetData(); //0 } #endif//F_FIND_WORK_TEST6_TWO_STACK_TO_QUEUE_20171219_JHASKDFJHASF_H_
相关文章推荐
- 《剑指Offer》面试题-用两个栈实现队列
- 剑指Offer:面试题7——用两个栈实现队列(java实现)
- 《剑指offer》面试题7:用两个栈实现队列
- 剑指offer第五题【用两个栈实现队列】c++实现
- 剑指Offer(第二版)面试题9:用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 剑指offer题解C++【5】用两个栈实现队列
- 《剑指Offer》面试题7:用两个栈实现队列
- 剑指offer 面试题7 用两个栈实现队列
- 《剑指Offer》面试题:用两个队列实现一个栈
- 剑指offer《面试题7:用两个栈实现队列》及用两个队列实现一个栈
- 剑指offer 面试题7 两个栈实现队列 java版答案
- 剑指Offer学习之面试题7:用两个栈实现队列
- 《剑指offer》(面试题7):用两个栈实现队列
- 《剑指Offer》学习笔记--面试题7:用两个栈实现队列
- 剑指offer——面试题7:用两个栈实现队列
- 《剑指Offer》面试题:用两个栈来实现一个队列
- 面试题07_用两个栈实现队列——剑指offer系列
- 剑指offer-面试题7-用两个栈实现队列
- 剑指Offer系列-面试题7:用两个栈实现队列