面试题7:用两个栈实现队列
2015-06-30 19:47
483 查看
题目:用两个栈实现一个队列。
队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除
结点的功能。
分析:栈的特点是后入先出,队列的特点是先入先出。首先按照入队列的顺序将数据压入栈stack1中,那么当需要删除队首元素时意味着要删除栈底元素,此时可利用另一个栈进行数据转移,按照stack1出栈的顺序将数据压入stack2中,此时stack2的栈顶元素
即为队首元素。此时可将stack2中的元素再转移回stack1中,当需要删除队首元素时重复这个过程。事实上,最后一步转移可以省略,因为当有元素需要插入队列时,直接将改元素压入stack1中,当需要删除队首元素时,如果stack2非空,直接从stack2中弹出栈顶元素如果stack2为空,则将stack1中的数据转移至stack2中。代码如下:
相关题目:用两个队列实现一个栈
分析:队列的特点是先入先出,因此若要弹出栈顶元素即要删除队列的尾元素,此时,可利用另一个队列进行数据转移。和栈不同的是,这种转移操作不影响数据的顺序。
push:找到一个非空队列,并将数据插入到队列尾部
pop: 找到一个非空队列,并将该队列除了队尾元素全部转移到另一个队列中,删除队尾元素。
队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除
结点的功能。
template <typename T> class CQueue { public: CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead(); private: stack<T>stack1; stack<T>stack2; };
分析:栈的特点是后入先出,队列的特点是先入先出。首先按照入队列的顺序将数据压入栈stack1中,那么当需要删除队首元素时意味着要删除栈底元素,此时可利用另一个栈进行数据转移,按照stack1出栈的顺序将数据压入stack2中,此时stack2的栈顶元素
即为队首元素。此时可将stack2中的元素再转移回stack1中,当需要删除队首元素时重复这个过程。事实上,最后一步转移可以省略,因为当有元素需要插入队列时,直接将改元素压入stack1中,当需要删除队首元素时,如果stack2非空,直接从stack2中弹出栈顶元素如果stack2为空,则将stack1中的数据转移至stack2中。代码如下:
template <typename T> void CQueue::appendTail(const T& node) { stack1.push(node); } template <typename T> T deleteHead() { if (stack2.empty() && stack1.empty()) throw new exception("queue is empty") ; if (stack2.empty()) { while (!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } } T node = stack2.top(); stack2.pop(); return node; }
相关题目:用两个队列实现一个栈
分析:队列的特点是先入先出,因此若要弹出栈顶元素即要删除队列的尾元素,此时,可利用另一个队列进行数据转移。和栈不同的是,这种转移操作不影响数据的顺序。
push:找到一个非空队列,并将数据插入到队列尾部
pop: 找到一个非空队列,并将该队列除了队尾元素全部转移到另一个队列中,删除队尾元素。
相关文章推荐
- 程序员必须要会算法吗? 获奖名单公布
- 诸葛分享:怎么面试架构师
- java 面试
- 黑马程序员---异常总结
- 编程范式,程序员的编程世界观
- 阿里巴巴离职DBA 35岁总结的职业生涯
- 面试题6:重建二叉树
- sql的简单的面试题
- 面试题5:从尾到头打印链表
- 黑马程序员——java的IO之File类
- 黑马程序员---基本字节流和高效字节流的效率比较
- 面试题4:替换空格
- 黑马程序员---IO流的简单应用
- sed命令介绍2【此处应该加,不转不是程序员】
- Mysql 子查询<二>这个面试题。。。。
- 面试题2:实现Singleton模式
- 这个时代,生涯管理意识有多重要!
- 黑马程序员---ArrayList集合嵌套HashMap集合并遍历
- 新手Android程序员之总结(一)-------------Context获取屏幕尺寸
- 黑马程序员---ArrayList遍历的三种方式