剑指offer--面试题7
//两个栈实现一个队列 #include<stack> //STL
#include<iostream> using namespace std; template<class T>
class CQueue
{
public:
CQueue();
~CQueue(); void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}; //思路:一个栈做添加队尾元素用;另一个做删除队首元素用。
// 操作时,对应栈有数据,另一个为空。 template<class T>
CQueue<T>::CQueue()
{
} template<class T>
CQueue<T>::~CQueue()
{
}
//stack1作为添加队尾元素的栈
template<class T>
void CQueue<T>::appendTail(const T& node)
{
if(stack1.empty())
{
while(!stack2.empty())
{
T temp = stack2.top();
stack1.push(temp);
stack2.pop();
}
stack1.push(node);
}
else
stack1.push(node);
} //stack2作为删除队首元素的栈
template<class T>
T CQueue<T>::deleteHead()
{
T Head;
if(stack2.empty())
{
if(stack1.empty())
{
cerr<<"This Queue is already empty!"
<<"Have no to be deleted!"<<endl;
exit();
}
while(!stack1.empty())
{
T temp = stack1.top();
stack2.push(temp);
stack1.pop();
}
Head = stack2.top();
stack2.pop();
}
else
{
Head = stack2.top();
stack2.pop();
} return Head;
} int main(int argc, char* argv[])
{
CQueue<char> q1;
q1.appendTail('a');
q1.appendTail('b');
q1.appendTail('c');
q1.appendTail('d');
q1.appendTail('e'); char Head = q1.deleteHead();
cout<<Head<<endl;
Head = q1.deleteHead();
cout<<Head<<endl; q1.appendTail('f');
q1.appendTail('g');
Head = q1.deleteHead();
cout<<Head<<endl;
Head = q1.deleteHead();
cout<<Head<<endl;
Head = q1.deleteHead();
cout<<Head<<endl;
Head = q1.deleteHead();
cout<<Head<<endl;
return ;
}
自己所做如上所示。思路就是:一个做删除栈;一个做添加栈。
相比较于作者的思想,虽然大体一致,但自己的思想有多余的部分:
在添加元素的时候,无论stack1是否为空,作者采取的策略为直接入栈,而自己却是先将stack2中的元素再弹出压入stack1,这一步根本就是多余的!
作者代码如下:(自己默写)
//作者代码,更简洁!
//stack1做入队操作,直接入队
template<typename T>
void CQueue<T>::appendTail(const T& node)
{
stack1.push(node);
} //stack2做出队操作
template<typename T>
T CQueue<T>::deleteHead()
{
if(stack2.empty())
{
while(stack1.empty())
{
T head = stack1.top();
stack2.push(head);
stack1.pop();
}
} if(stack2.empty())
throw new exception("queue is empty."); T Head = stack2.top();
stack2.pop(); return Head;
}
作者代码的结构安排更紧凑,更简洁!!!
剑指offer--面试题7的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
随机推荐
- 找不到命名空间命名空间:System.Windows.Forms
System.Windows.Forms在system.windows.forms.dll中.需要添加引用.在解决方案资源管理器中的引用上单击右键,选择添加引用.找到System.windows.fo ...
- 【百度地图API】JS版本的常见问题
1.请问如何将我的店铺标注在百度地图上?我是否可以做区域代理?在百度地图上标注是否免费? 答复: 这里只负责API的技术咨询,不解决任何地图标注问题.在百度地图上标注自己公司,即气泡标注业务.该业务已 ...
- js中的继承1--类继承
继承:function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } functi ...
- CSS3伪类
1.:last-child 比如:查找ul的最后一个li ul li:last-child { //样式 } 2.:first-child 比如:查找ul的第一个li ul li:first-chil ...
- MySQL 密码增强插件
200 ? "200px" : this.width)!important;} --> 介绍 以前没有太注意MySQL密码安全策略的配置方法,只是人为了将密码设为复杂密码,但 ...
- Mac支付宝插件风波
1.前言 首先我喜欢看一些创业的书,很多书里都会有马云的身影,马云也算是对我有一定的影响,从而我对淘宝也产生了一定的好感.但是关于这次插件事情,我对阿里产生了一些排斥的心里作用.我并不想吐槽淘宝,也不 ...
- C#操作Excel基本操作
/// using Microsoft.Office.Core; using Microsoft.Office.Interop.Excel; using System.IO; using System ...
- sql server 中 bigint 和 datetime 性能比较
-- 创建表 create table Test_tbl ( ID varchar(40) primary key nonclustered, IntCol int, DateCol datetime ...
- phpStudy 2016 更新下载,新版支持php7.0
目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 『软件简介』该程序包集成 ...
- Delphi XE5教程11:Tokens
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...