代码面试指南学习记录-第一章01
2017-08-23 14:53
190 查看
代码面试指南学习记录-第一章01
是左程云dalao的书。因为自己见过的题少,机械地大量做题收获也来得太慢,所以打算每做一题就写一点点总结。不算是话痨,写不了太多……而且是个辣鸡,一星的题就做得不顺利了orz所有题目均用c实现。
第一章主要使用的数据结构是栈和队列。第一题要实现一个在原有pop,push功能的基础上有getMin功能的栈,调用这些功能的时间复杂度均为O(1).因此可以再申请一个保存每一步最小值的栈。然而书中所写的是申请StackData(与原栈完全相同)和StackMin(保存每一步最小值,栈顶元素为原栈中最小值)两个栈。我个人认为StackData的申请是没有必要的,只是延长了运行时间,可以略去。
自己实现的第一题的主要代码部分如下……pop_Init、push_Init和IsEmpty等例程详见数据结构与算法分析(C语言实现)
void push(Stack S,ElementType X){ if(IsEmpty(TmpMin)){ push_Init(TmpMin,X); } if(X<TmpMin->Next->Element){ push_Init(TmpMin,X); } push_Init(S,X); } ElementType pop(Stack S){ ElementType Tmp=S->Next->Element; pop_Init(S); if(Tmp==(TmpMin->Next->Element)){ pop_Init(TmpMin); } return Tmp; } ElementType getMin(Stack S){ return (TmpMin->Next->Element); }
需要注意的是,书中一共给了两种方法。主要区别在于将数据压入TmpMin时的操作。第一种方法中,如果后压入原栈的数据大于StackMin栈顶数据,则不重复压入;第二种方法则会重复压入目前的最小值,以保持StackMin和原栈的元素个数相同,这样弹出数据时无需大小比较,直接弹出即可。
如书中说,第一种方法,压入省空间,弹出耗时略长;第二种方法,压入时略浪费空间,但弹出耗时短。
相关文章推荐
- 代码面试指南学习记录-第一章02
- 关于Python数据分析基础教程 Numpy学习指南 第二版 第三章中代码所呈现的问题
- 学习JS权威指南记录
- 《软技能--代码之外的生存指南》————第三篇---学习
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- 程序代码调优工具perf学习记录
- Scala 小程序记录(学习期间的代码片段)
- 游戏开发学习记录03-用LeanCloud在Unity中部署后端服务代码实现
- 《软技能-代码之外的生存指南》读书心得 ---10步学习法
- [学习记录]iOS通过代码关闭输入预测
- 面试代码题记录
- 程序员代码面试指南:IT名企算法与数据结构题目最优解
- 记录一些比较好的代码管理及学习方式
- VB程序学习代码记录20160717
- 《SpringMVC 学习指南》随书代码实现(二)Eclipse+Servlet+jsp+Maven
- VB程序学习代码记录20160729
- SAP MM学习指南操作记录—1.MM基本配置
- 程序员代码面试指南(栈和队列)
- VB程序学习代码记录20160725
- 程序员代码面试指南-猫狗队列(c++)