
数据结构
blexsantos
这个作者很懒,什么都没留下…
展开
-
数据结构:数组——最简单最基础的数据结构
王争数据结构笔记(05)1)线性表: A)链表,队列,栈,数都是线性表 B)每个线性表的数据只有前后两个方向2)非线性表: A)二叉树,堆,图都是非线性表 B)数据之间不是前后关系3)数组支持随机访问,根据下标随机访问的时间复杂度是O(1)4)插入与删除 A) 向有序数组中插入元素的平均时间复杂度(1+2+……+n)/n=O(n) B...原创 2018-10-01 21:49:40 · 525 阅读 · 0 评论 -
数据结构——跳表
王争数据结构17——笔记1、为了使以链表存储的数据仍然能够使用二分查找,将链表进行改造形成跳表。2、跳表是一个动态数据结构,支持快速的插入、删除、查找,具有替代红黑树的能力。3、跳表就是链表增加多级索引的结构。通常跳表的时间复杂度为O(3logn),即O(logn)。查找的时间复杂度和二分查找相同。4、跳表是典型的空间换时间。原始链表大小为n,每隔两个节点抽1个,总结点数目为...原创 2019-01-30 14:32:45 · 277 阅读 · 0 评论 -
数据结构——二分查找(2)
王争数据结构笔记-161、常见的二分查找变形问题:1)查找第一个值等于给定值的元素;2)查找最后一个值等于给定值的元素;3)查找第一个大于等于给定值的元素;4)查找最后一个小于等于给定值的元素。2、查找第一个值等于给定值的元素public int bsearch(int [] a,int n,int value){ int low=0; int high=n-1;...原创 2019-01-29 20:50:32 · 222 阅读 · 0 评论 -
数据结构——散列表(2)
王争数据结构19笔记1、一个工业级的散列表具有的特点: 1)支持快速的查询、插入、删除操作; 2)内存占用合理,不能浪费过多的内存空间; 3)性能稳定,极端情况下,散列表的性能也不会退化到无法接受的情况。2、设计一个散列表主要的思路包括: 1)设计一个合适的散列函数 2)定义装载因子阈值,并且设计动态扩容策略 3)选择合适的...原创 2019-01-31 20:08:53 · 176 阅读 · 0 评论 -
数据结构:线性排序
王争数据结构笔记(13)&(14)1、桶排序 、计数排序、基数排序均是时间复杂度为O(n)2、桶排序比较适合在外部排序中使用。桶排序对排序数据的要求比较苛刻:要排序的数据需要容易划分为m个桶,并且桶与桶之间有着天然的大小顺序。其次数据在各个桶之间的分布比较均匀。在极端情况下,如果数据都被划分到一个桶中,其时间复杂度为O(nlogn)。3、计数排序只能在数据范围不大的场合,如果数...原创 2018-12-31 17:01:02 · 336 阅读 · 0 评论 -
数据结构:排序2
王争数据结构(12)笔记1、归并排序与快速排序都是复杂度为O(nlogn)2、归并排序把要排序的数组分为前后两个部分,分别进行排序之后再合并。归并排序使用分治思想。通常归并排序可以用递归来进行实现。3、归并排序是稳定的排序算法。归并排序的执行效率与要排序的原始数组的有序程度无关,其时间复杂度为O(nlogn)。归并排序的空间复杂度为O(n)。4、快排算法同样使用分治的思想。其主要思...原创 2018-12-31 15:33:28 · 172 阅读 · 0 评论 -
数据结构——二分查找(1)
王争数据结构笔记(15)1、二分查找也陈伟折半查找算法,是一种非常简单易懂的快速查找算法。二分查找的时间复杂度为O(logn)。对数时间复杂度是一种极其高效的时间复杂度,比时间复杂度为O(1)的算法还要高效。2、二分查找的非递归实现。public int bsearch(int[] a,int n,int value){ int low=0; int high=n...原创 2019-01-04 16:39:22 · 222 阅读 · 0 评论 -
数据结构:排序(1)
王争数据结构11笔记1、冒泡排序、插入排序、选择排序是基于比较的排序。时间复杂度为。2、快排,归并排序也是基于比较的排序。时间复杂度为3、桶排序、计数排序、基数排序不是基于比较的排序,其时间复杂度为4、冒泡排序BS:一次冒泡会让至少一个元素移动它应该在的位置,重复n次之后就完成了n个数据的排序工作。 每次冒泡就是把从左至右的数据中第一个相邻关系发生异常的数据摆放到正确的位...原创 2018-10-25 15:23:09 · 1418 阅读 · 0 评论 -
数据结构:递归
王争数据结构(10)笔记1、数据结构中动态规划和递归较难理解的知识点2、去的过程称为“递”,而回的过程叫做“归”。所有的递归可以用递推公式描述。用栈的数据结构加上逻辑算法实现业务功能。3、递归需要满足的三个条件:1)一个问题可为几个子问题的解;2)分解后的子问题和原问题求解思路相同;3)存在递归终止条件4、写递归代码的关键是写出递推公式,找到终止条件。5、例子:假如有n个台阶,...原创 2018-10-16 19:24:16 · 865 阅读 · 0 评论 -
数据结构:队列
王争数据结构(09)笔记1、队列(queue):先进先出,不允许插队。如同栈操作中的入栈push()和出栈pop()。队列的基本操作是入队enqueue()和出队dequeue()。入队就是放一个数据到队列尾部。出队就是从队列头部取一个元素。2、用链表实现的队列叫链式队列,用数组实现的队列叫做顺序队列。3、数组实现的非循环队列中,队满的判断条件是tail==n,对空的判断条件是head...原创 2018-10-10 09:40:55 · 193 阅读 · 0 评论 -
数据结构:栈
王争据结构笔记(08)1、栈结构:后进者显出,先进者后出。栈是一种操作受限的线性表,只允许在一端插入和删除数据2、栈主要包含的操作:入栈和出栈。3、用数组实现的栈叫做顺序栈,用链表实现的栈叫做链式栈。4、无论是链式栈还是顺序栈,入栈和出栈空间复杂度都是O(1),时间复杂度也是O(1)。 动态扩容的顺序栈出栈时间复杂度为O(1)。当栈中存在空闲空间的时候,入栈操作的时间复...原创 2018-10-09 18:44:05 · 468 阅读 · 0 评论 -
数据结构-链表(2)
王争数据结构课程笔记(07)写好链表的技巧:1、用好指针与引用 关于指针的理解:将某个变量赋值给指针,就是把变量的地址赋值给指针。指针中存储了这个变量的地址,指向这个变量,通过这个指针能够找到这个变量。Eg:p->next=q:p结点中的next指针存储了q结点的内存地址。Eg2:p->next=p->next->next,p结点的next指针存...原创 2018-10-06 13:04:10 · 186 阅读 · 0 评论 -
数据结构:链表(1)
王争数据结构笔记(06)1、三种常见的缓存淘汰策略:先进先出策略FIFO,最少使用策略(Least Frequently Used,LFU),最近最少使用策略(Least Recently Used,LRU).2、数组利用连续的内存空间进行存储,对内存的要求较高。链表则是通过指针零散的内存块串接起来。如图1所示。图片来源:王争数据结构第六课3、三种常见的链表:单链表,双向链表和...原创 2018-10-03 11:23:58 · 190 阅读 · 0 评论 -
数据结构——散列表(1)
王争数据结构笔记(18)1、散列表,也叫做哈希表。主要利用数组支持下标随机访问数据的特性演化而来。2、散列表两个核心:散列函数设计以及散列冲突问题的解决。散列函数设计的好坏决定了散列冲突的概率。解决散列冲突的办法有开放寻址法和链表法。3、所有的散列函数无法避免散列冲突。4、开放寻址冲突解决中包含:线性探测、二次探测和双重散列。线性探测的每次探测步长为1,探测的下标序列时hash(k...原创 2019-01-30 15:19:38 · 233 阅读 · 0 评论