随笔分类 - 数据结构与算法笔记
基于极客时间《数据结构与算法之美》课程做的笔记和自己的一些总结
摘要:最经典、常用的排序: 提问:插入排序和冒泡排序的时间复杂度相同,都是O(n2),在实际开发中,为什么更倾向于使用插入排序? 如何分析一个“排序算法”? 排序算法的执行效率 1.最好、最坏、平均情况时间复杂度 这样区分的原因: 1)有些排序算法会区分,为了好对比。 2)不同有序度的数据对排序执行有影响
阅读全文
摘要:如何理解“递归” 比如在电影院不知道自己现在坐的位置是第几排,就问下前排的是第几排(x),自己就是x+1,如果他也不知道他就继续问前排,知道问道第一排的人,这是“递”。 而第一排的人往会一排排传自己是第几排,这就是“归”。 递推公式就是如下: f(n)=f(n-1)+1 其中,f(1)=1 改成代码
阅读全文
摘要:队列(queue) 先进者先出,这就是典型的“队列” 栈有基本操作入栈push()和出栈pop() 队列也有两个基本操作入队enqueue(),放一个数据到队列的尾部;出队dequeue(),从队列头部取一个元素。 所以,队列和栈一样,也是一种操作受限的线性表数据结构。 顺序队列和链式队列 用数组实
阅读全文
摘要:我们可以用栈实现浏览器的前进后退功能 那么栈又是什么? 栈就像一叠盘子,从下一个一个往上放。后进先出,先进后出,就是典型栈的结构。 从操作特性上来看,栈是十分受限制的一种数据结构,只有一端能够操作,但因为只暴露了一端的操作接口,便不容易出错,更可控。因此当数据集合满足先进后出,后进先出的特点时,就应
阅读全文
摘要:写好链表的代码 1.理解指针(引用)的含义 将变量赋值个指针,实际上就是将这个变量的地址赋值给指针 p->next = q : p结点的next指针存储了q结点的内存地址 p->next = q->next->next : p结点的next指针存储了q结点的下下一个结点的内存地址 2.警惕指针丢失和
阅读全文
摘要:对比数组,链表不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。 链表有单链表、双链表、循环链表 单链表 将零散的内存块(被称为结点)串联在一起,每个链表的节点除了存储数据外还要存储下一个结点的指针,记录下一个结点的指针成为后继指针。 头结点和尾结点比较特殊,头结点记录链表的基
阅读全文
摘要:为什么数组要从0开始变好,而不是1开始呢? 数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据结构。 随机访问 插入、删除数据很低效 面试题: 数组和链表的区别? 链表适合插入、删除,时间复杂度为O(1);数组支持随机访问,根据小标随机访问的时间复杂度为O(1) 数组的内
阅读全文
摘要:最好、最坏情况时间复杂度 1 // n 表示数组 array 的长度 2 int find(int[] array, int n, int x) { 3 int i = 0; 4 int pos = -1; 5 for (; i < n; ++i) { 6 if (array[i] == x) 7
阅读全文
摘要:复杂度分析是整个算法学习的精髓 为什么需要复杂度分析? 算法执行效率评估: 事后统计法: 1.测试结果非常依赖测试环境 2.测试结果受数据规模影响很大 因此需要一个不用具体的测试数据来测试,就可以粗略估算算法执行效率的方法 大O复杂度表示法 每行代码>cpu>读数据-运算-写数据 :unit_tim
阅读全文
浙公网安备 33010602011771号