Chapter 3 | Stacks and Queues--两个栈实现队列
2014-03-21 16:36
337 查看
3.5 Implement a MyQueue class which implements a queue using two stacks.
译文:
利用两个栈实现一个队列 MyQueue。
都知道队列的特点是 “先进先出”(FIFO),栈的特点是 “先进后出”(FILO)。可以很简单的通过两个栈来实现一个队列,即实现队列,则先将数据压入第一个栈,然后依次弹出并压进第二个栈,随后出栈,就满足 FIFO,关键是数据入队和出队该怎么处理,必须保证单次数据处理都满足FIFO,两个栈,可以第一个栈负责入队,第二个栈负责出栈,当有新数据入队时,将其压入第一个栈,出队时,则将第二个栈的数据弹出,当第二个栈为空时,出队则将第一个栈依次弹出并压入第二个栈,然后出栈。
译文:
利用两个栈实现一个队列 MyQueue。
都知道队列的特点是 “先进先出”(FIFO),栈的特点是 “先进后出”(FILO)。可以很简单的通过两个栈来实现一个队列,即实现队列,则先将数据压入第一个栈,然后依次弹出并压进第二个栈,随后出栈,就满足 FIFO,关键是数据入队和出队该怎么处理,必须保证单次数据处理都满足FIFO,两个栈,可以第一个栈负责入队,第二个栈负责出栈,当有新数据入队时,将其压入第一个栈,出队时,则将第二个栈的数据弹出,当第二个栈为空时,出队则将第一个栈依次弹出并压入第二个栈,然后出栈。
#include <iostream> #include <stack> using namespace std; template <class Elem> class MyQueue { public: MyQueue() {} ~MyQueue() {} void EnQueue(const Elem &Item); Elem DeQueue(void); void Move(stack<Elem> &first, stack<Elem> &last); bool isEmpty(void); unsigned int Size(void); private: stack<Elem> stack_in; stack<Elem> stack_out; }; //将数据依次从第一个栈弹出,然后压入第二个栈 template <class Elem> void MyQueue<Elem>::Move(stack<Elem> &stack_first, stack<Elem> &stack_last) { while (!stack_first.empty()) { stack_last.push(stack_first.top()); stack_first.pop(); } } //入队直接压进第一个栈 template <class Elem> void MyQueue<Elem>::EnQueue(const Elem &Item) { stack_in.push(Item); } //出队是从第二个栈弹出,先判断第二个栈是否为空,为空则须将第一个栈的数据弹出并压入第二个栈,然后出栈 //不为空则直接从第二个栈出栈 template <class Elem> Elem MyQueue<Elem>::DeQueue(void) { if (stack_out.empty()) Move(stack_in, stack_out); Elem Item = stack_out.top(); stack_out.pop(); return Item; } template <class Elem> bool MyQueue<Elem>::isEmpty(void) { return (stack_in.empty() && stack_out.empty()); } template <class Elem> unsigned int MyQueue<Elem>::Size(void) { return (stack_in.size() + stack_out.size()); }
相关文章推荐
- Chapter 3 | Stacks and Queues--一个数组实现三个栈(续)
- Chapter 3 | Stacks and Queues--实现数据结构模拟一个栈由几个子栈组成,并可以在指定子栈上进行出栈操作
- Chapter 3 | Stacks and Queues--一个数组实现三个栈
- Chapter 3 | Stacks and Queues--实现一个函数返回栈中的最小值,时间复杂度为O(1)
- Implement Queue using Stacks 两个栈实现队列
- Objective-C achieve Queue using Two Stacks(用两个堆栈实现队列)
- Chapter 3 Stacks and Queues - 3.2
- Chapter 3 Stacks and Queues - 3.3
- 算法导论学习10.1 两个栈共享一个数组 and 两个栈实现一个队列 and 两个队列实现一个栈
- [LeetCode-232] Implement Queue using Stacks(两个栈实现一个队列)
- Chapter 3 Stacks and Queues - 3.4
- [CareerCup] 3.5 Implement Queue using Two Stacks 使用两个栈来实现队列
- Chapter 3 Stacks and Queues - 3.5
- 18.用两个栈实现队列[2StacksToImplementQueue]
- Chapter 3 | Stacks and Queues
- CCI_chapter 3 Stacks and Queues
- Chapter 3 Stacks and Queues - 3.6
- leetcode:用两个栈实现一个队列 Implement Queue using Stacks
- Implement Queue using Stacks(用两个栈实现队列)
- [Cracking the Coding Interview] Chapter 3 - Stacks and Queues