剑指offer——面试题7:用两个栈实现队列
来源:互联网 发布:数码宝贝网络侦探进化 编辑:程序博客网 时间:2024/06/09 22:31
题目(牛客网):用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
代码:
class Solution{public: void push(int node) { stack1.push(node); } int pop() { int temp = 0; if(stack2.empty()) { while(!stack1.empty()) { temp = stack1.top(); stack2.push(temp); stack1.pop(); } } temp = stack2.top(); stack2.pop(); return temp; }private: stack<int> stack1; stack<int> stack2;};
分析:用两个栈实现一个队列,也就是编写两个函数,一个实现在队列的尾部插入结点,一个实现在队列的头部删除结点。此时,利用两个栈来实现,比如元素 a b c d,先压入到栈1,顺序为:a ,b,c ,d。此时如果要按照队列那样,先进先出,先弹出来的是 a。此时可以将栈1的元素弹出,借助另外一个栈,将元素压入到栈2中。这样,将栈2的栈顶元素弹出,就是队列的弹出顺序了。
《剑指offer》一书的 P59,对此题有详细的描述。但是书上采用的编程形式与牛客网有很大不同,程序如下:
template <typename T> class CQueue{public: CQueue(void); ~CQueue(void); // 在队列末尾添加一个结点 void appendTail(const T& node); // 删除队列的头结点 T deleteHead();private: stack<T> stack1; stack<T> stack2;};template <typename T> CQueue<T>::CQueue(void){}template <typename T> CQueue<T>::~CQueue(void){}template<typename T> void CQueue<T>::appendTail(const T& element){ stack1.push(element);} template<typename T> T CQueue<T>::deleteHead(){ if(stack2.size()<= 0) { while(stack1.size()>0) { T& data = stack1.top(); stack1.pop(); stack2.push(data); } } if(stack2.size() == 0) throw new exception("queue is empty"); T head = stack2.top(); stack2.pop(); return head;}
阅读全文
2 0
- 剑指offer-->面试题7 用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指Offer:面试题7 用两个栈实现队列
- 《剑指Offer》面试题7:用两个栈实现队列
- 【剑指offer】 面试题7: 用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer-面试题7:用两个栈实现队列
- 剑指offer---面试题7 用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 剑指Offer面试题7用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 剑指offer--面试题7: 用两个栈实现队列
- 剑指offer-面试题7-用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer 面试题7 用两个栈实现队列
- 剑指offer面试题[7]-用两个栈实现队列
- 剑指Offer面试题7[用两个栈实现队列]
- 算法导论读后感-之堆,堆排序,堆排序的应用
- 路透:百度扎根硅谷 引领自动驾驶汽车研发
- 合唱团问题-懵逼-强行做-错-更懵逼-继续做-完成
- POJ
- Python selenium的js扩展实现
- 剑指offer——面试题7:用两个栈实现队列
- 计蒜客————Anniversary Cake
- nyoj488 素数环(dfs)
- 数据结构实验之二叉树二:遍历二叉树
- binary-tree-zigzag-level-order-traversal Java code
- 关乎到性命的问题,请一定看完
- 数据结构实验之二叉树三:统计叶子数
- python中if __name__ == '__main__': 的解析
- gojs入门