
数据结构
user_lwjAug
这个作者很懒,什么都没留下…
展开
-
栈和队列面试题
1. 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)用两个栈实现思路:用两个栈来实现一个栈为普通栈,一个栈专门放最小值当普通栈要入的数据小于等于min栈的栈顶的时候两个栈同时入;反之如果大于的话min栈不入数据出栈的时候如果min栈中的数据等于普通栈中的数据,两个栈同时出,否则min栈只将栈顶的元素 返回即可原理图:入栈图:出栈图typedef i...原创 2018-06-20 15:58:58 · 339 阅读 · 0 评论 -
链表和顺序表面试题(进阶版)
一下面试题中要用到的数据类型以及一些函数。1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)思路:typedef int DataType;typedef struct SLinkList{ DataType data; struct SLinkList*PNext;}SNode;// 初始化 void SLinkList_InIt(SNode **Phead){ as...原创 2018-06-13 17:30:56 · 337 阅读 · 0 评论 -
链表和顺序表的面试题(中级版)
1.合并两个有序链表,合并后依然有序思路:两个指针分别指向两个有序链表比较两个指针指向的节点的数字的大小,将较小的拿出来放到新的链表中,更新拿出来数据的那个指针,另外一个不动将剩下的节点链接到新的链表后面/*1. 两个指针分别指向两个有序链表2.比较两个指针指向的节点的数字的大小,将较小的拿出来放到新的链表中,3.更新拿出来数据的那个指针,另外一个不动4.当其中一个链表指向NULL时...原创 2018-06-13 15:39:22 · 262 阅读 · 0 评论 -
冒泡排序和选择排序的区别
一、冒泡排序冒泡排序的时间复杂度为O(n^2),冒泡排序法是最简单基础的一种排序方法,但是它的时间复杂度较大,排序一组数组比较的次数较多。冒泡排序的具体操作过程:比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这一趟比较完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。...原创 2018-06-11 20:30:05 · 13536 阅读 · 6 评论 -
链表和顺序表的面试题(初级版)
1.从尾到头打印单链表有两种方法: 递归法 注意事项:递归的结束结束条件比较重要,当链表的指针走到尾部(NULL)时结束递归。下面是原理图,便于理解:void SLinkList_Print(SNode *Phead){ assert(Phead != NULL); while (Phead != NULL)//递归结束条件 { printf("%d ", Phead-&g...原创 2018-06-11 20:22:44 · 552 阅读 · 0 评论 -
时间复杂度和空间复杂度
度量算法的效率时就会提到时间复杂度和空间复杂度。在谈时间复杂度之前我们先介绍一个O渐进表示法。一、什么是O渐进表示法一个算法语句总的执行次数总是关于问题规模N的某个函数,记为f(N),N称为问题的规模。语句总的执行次数记为T(N),当N不断变化是,T(N)也在变化,算法执行次数的增长速率和f(N)的增长速率相同。则有T(N)=O(f(N)),称O(f(N))为时间复杂度O的渐进表示法。一般算法O(...原创 2018-05-25 15:45:32 · 2663 阅读 · 3 评论