您的位置:首页 > 职场人生

代码面试指南学习记录-第一章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和原栈的元素个数相同,这样弹出数据时无需大小比较,直接弹出即可。

如书中说,第一种方法,压入省空间,弹出耗时略长;第二种方法,压入时略浪费空间,但弹出耗时短。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 数据结构