标签:des c style class blog code
题目:用两个栈实现一个队列.
队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成队列尾部插入结点 和 队列头部删除结点
AppendTail:直接将元素入栈stack1
DeleteHead:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出
如果stack2为空,我们把stack1中的元素逐个弹出并入栈stack2,由于先进入队列的元素被压到stack1的底端,经过弹栈和压入stack2之后就处于stack2的顶端
1 #include <stack> 2 #include <stdexcept> 3 4 template <typename T> 5 class MyQueue { 6 public: 7 MyQueue(); 8 ~MyQueue(); 9 10 void AppendTail(const T& node); 11 T DeleteHead(); 12 13 private: 14 std::stack<T> stack1; 15 std::stack<T> stack2; 16 }; 17 18 template<typename T> 19 void MyQueue<T>::AppendTail(const T& node) 20 { 21 stack1.push(node); 22 } 23 24 template<typename T> 25 T MyQueue<T>::DeleteHead() 26 { 27 if (stack2.size() <= 0) { 28 while (stack1.size() > 0) { 29 T& data = stack1.top(); 30 stack1.pop(); 31 stack2.push(data); 32 } 33 } 34 if (stack2.empty) { 35 throw runtime_error("queue is empty"); 36 } 37 38 T head = stack2.top(); 39 stack2.pop(); 40 return head; 41 }
题目:用两个队列实现一个栈.
栈的声明如下,请实现它的两个函数 Push 和 Pop,分别完成入栈 和 出栈 功能
入栈:仅将元素push到 非空队列
出栈:将非空队列的元素逐个出队列,并且将 除了最后一个元素的其余所有元素 push到 另外的空队列
1 #include <stack> 2 #include <stdexcept> 3 4 template <typename T> 5 class MyStack { 6 public: 7 MyStack(); 8 ~MyStack(); 9 10 void Push(const T& data); 11 void Pop(); 12 private: 13 std::queue<T> queue1; 14 std::queue<T> queue2; 15 }; 16 17 template <typename T> 18 void MyStack<T>::Push(const T& data) 19 { 20 if (queue1.empty() && queue2.empty()) queue1.push(data); 21 if (queue1.empty() && !queue2.empty()) queue2.push(data); 22 if (!queue1.empty() && queue2.empty()) queue1.push(data); 23 if (!queue1.empty() && !queue2.empty()) throw runtime_error("tow queues cannot non-empty at same time"); 24 } 25 template <typename T> 26 void MyStack<T>::Pop() 27 { 28 if (queue1.empty() && queue2.empty()) { 29 throw runtime_error("two queues are empty"); 30 } 31 32 if (!queue1.empty() && !queue2.empty()) { 33 throw runtime_error("two queues cannot non-empty at same time"); 34 } 35 36 if (!queue1.empty() && queue2.empty()) { 37 int nNodes = queue1.size(); 38 int i = 0; 39 while (!queue1.empty()) { 40 T& node = queue1.front(); 41 queue1.pop(); 42 if (i < nNodes - 1) { 43 queue2.push(node); 44 ++i; 45 } 46 } 47 } 48 49 if (queue1.empty() && !queue2.empty()) { 50 int nNodes = queue2.size(); 51 int i = 0; 52 while (!queue2.empty()) { 53 T& node = queue2.front(); 54 queue2.pop(); 55 if (i < nNodes - 1) { 56 queue1.push(node); 57 ++i; 58 } 59 } 60 } 61 }
剑指offer (7) 两个栈实现队列 两个队列实现栈,布布扣,bubuko.com
标签:des c style class blog code
原文地址:http://www.cnblogs.com/wwwjieo0/p/3770574.html