用两个栈实现一个队列,算法和实现
2013-11-02 18:41
295 查看
#include <iostream> #include <vector> #include <stack> using namespace std; /* 用两个栈实现一个队列,算法和实现 */ class Queue_My { public: Queue_My(); void Pop(); void Push(int value); int Top(); void CreateQueue(const vector<int> & vec); private: stack<int,vector<int>> m_stackA; stack<int,vector<int>> m_stackB; }; Queue_My::Queue_My() {} void Queue_My::CreateQueue(const vector<int> & vec) { m_stackA = stack<int,vector<int>>(vec); } //入队函数 //算法:使新入队元素始终存放在栈A中,且位于栈顶。 void Queue_My::Push(int value) { m_stackA.push(value); } //出队函数: //算法: //1.优先让m_stackB中元素出栈,栈B中的栈顶元素即为队首元素。 //2.如果栈B为空,把m_stackA中元素出栈并将其压入栈B中,直到使栈A中只剩下栈底元素。 //此时再让此栈底元素出栈即队首元素出队。 void Queue_My::Pop() { int topVal; //如果m_stackB不为空,栈顶元素即为队首元素。 if (!m_stackB.empty()) { topVal = m_stackB.top(); m_stackB.pop(); return ; } else { //队中无元素即栈A和栈B都为空。 if (m_stackA.empty()) { return; } //如果栈B为空,把m_stackA中元素出栈并将其压入栈B中,直到使栈A中只剩下栈底元素。 else { while(m_stackA.size()>1) { topVal = m_stackA.top(); m_stackA.pop(); m_stackB.push(topVal); } topVal = m_stackA.top(); m_stackA.pop(); return; } } } int main() { int a[] = {1,2,3}; vector<int> v(a,a + sizeof(a)/ sizeof(int)); Queue_My q; q.CreateQueue(v); q.Push(8); q.Push(3); q.Pop(); q.Pop(); q.Push(11); return 0; }
相关文章推荐
- 【算法题目】用两个栈实现一个队列
- 每天一个小算法(6)---- 通过两个栈实现一个队列
- 数据结构与算法之—两个栈实现一个队列
- 两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】
- 算法面试题:使用两个堆栈实现一个队列
- [算法学习]两个栈实现一个队列
- 算法26:两个栈实现一个队列
- 算法分析:两个栈实现一个队列
- 【算法】用两个栈实现一个队列
- 《算法》第一章——利用两个栈实现一个队列的push和pop操作
- 简单算法 - 用两个栈实现一个队列
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 算法导论10.1-7习题解答(用两个队列实现一个栈)
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- 用两个栈实现一个队列的功能?要求给出算法和思路!
- 用两个栈实现一个队列算法
- 简单算法 - 两个队列实现一个栈
- 算法题目---用两个队列实现一个栈
- 数据结构与算法_两个栈实现一个队列的功能
- 两个栈实现一个队列的算法