数据结构

day03 【List、Set、数据结构、Collections】

。_饼干妹妹 提交于 2020-03-26 01:56:35
day03 【List、Set、数据结构、Collections】 主要内容 数据结构 List集合 Set集合 Collections 教学目标 [ ] 能够说出List集合特点 [ ] 能够说出常见的数据结构 [ ] 能够说出数组结构特点 [ ] 能够说出栈结构特点 [ ] 能够说出队列结构特点 [ ] 能够说出单向链表结构特点 [ ] 能够说出Set集合的特点 [ ] 能够说出哈希表的特点 [ ] 使用HashSet集合存储自定义元素 [ ] 能够说出可变参数的格式 [ ] 能够使用集合工具类 [ ] 能够使用Comparator比较器进行排序 第一章 数据结构 2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。 现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。 我们java是面向对象的语言,就好似自动档轿车,C语言好似手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A点 开到 B点

CDQ分治【待补充,数据结构 - CDQ分治】

人盡茶涼 提交于 2020-03-25 02:59:10
为什么划分到数据结构Tag内呢,因为CDQ分治可以顶替复杂的高级数据结构,而且常数比较小。 待补充 相关资料 【教程】简易CDQ分治教程&学习笔记 CDQ学习笔记 权值树状数组/权值线段树 【算法讲堂】【电子科技大学】【ACM】CDQ分治 树状数组求逆序数 BZOJ 陌上花开 来源: https://www.cnblogs.com/shengwang/p/9857150.html

AQS的数据结构及实现原理

可紊 提交于 2020-03-24 23:43:42
  接下来从实现角度来分析同步器是如何完成线程同步的。主要包括:同步队列、独占式同步状态获取与释放、共享式同步状态获取与释放以及超时获取同步状态等。 1、同步队列   同步器依赖内部的一个同步队列来完成同步状态的管理。当线程获取同步状态失败时,会被加入到队列中,并同时阻塞线程。当同步状态释放时,会把首节点中的线程唤醒,使其在册尝试获取同步状态。(疑问: 1、确定只唤醒首节点么,这不就是公平方式获取了么?2、首节点是否能一定获取到锁,为什么? )   a、确定只唤醒了首节点,的确这个获取方式相对比较公平,虽然新节点也可能优先获取到锁。待稍后对比重入锁获取过程;     [对比过后]:重入锁获取逻辑,就是先判断是否有人在用锁,如果有,判断是不是当前线程,如果不是,则当前线程排队,一旦进入排队队列,其实对这个队列来说,真的就是公平锁了,不公平的地方在于后来新来的线程可能会由于首节点刚好释放而获取到锁,造成“插队”;   b、首节点不一定能获取到,因为可能有新线程正好进入,然后获取了锁;   同步队列中的数据类型为Node,其中各个属性描述如下: int waitStatus 等待状态: 1 ,在队列中等待的线程等待超时或者被中断,从队列中取消等待; -1,后继节点处于等待; -2,节点在等待队列中,当condition被signal()后,会从等待队列转到同步队列; -3

每个程序员都必须掌握的 8 种数据结构!

不想你离开。 提交于 2020-03-24 12:27:28
作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。 在本文中,我将简要解释每个程序员必须知道的8种常用数据结构。 1.数组 数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至是数组数组(例如二维数组)。数组已建立索引,这意味着可以进行随机访问。 Fig 1. Visualization of basic Terminology of Arrays 数组运算 · 遍历:遍历所有元素并进行打印。 · 插入:将一个或多个元素插入数组。 · 删除:从数组中删除元素 · 搜索:在数组中搜索元素。您可以按元素的值或索引搜索元素 · 更新:在给定索引处更新现有元素的值 数组的应用 · 用作构建其他数据结构的基础,例如数组列表,堆,哈希表,向量和矩阵。 · 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。 2.链表 链表是一种顺序结构

每个程序员都必须掌握的 8 种数据结构!

我只是一个虾纸丫 提交于 2020-03-24 11:40:47
3 月,跳不动了?>>> 作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。 在本文中,我将简要解释每个程序员必须知道的8种常用数据结构。 1.数组 数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至是数组数组(例如二维数组)。数组已建立索引,这意味着可以进行随机访问。 Fig 1. Visualization of basic Terminology of Arrays 数组运算 · 遍历:遍历所有元素并进行打印。 · 插入:将一个或多个元素插入数组。 · 删除:从数组中删除元素 · 搜索:在数组中搜索元素。您可以按元素的值或索引搜索元素 · 更新:在给定索引处更新现有元素的值 数组的应用 · 用作构建其他数据结构的基础,例如数组列表,堆,哈希表,向量和矩阵。 · 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。 2.链表

数据结构&算法

纵然是瞬间 提交于 2020-03-23 20:35:35
3 月,跳不动了?>>> 在分析算法效率时,经常关注以下两种复杂度: (1)最坏情况复杂度:T worst (n) (2)平均复杂度:T avg (n) 易知T avg (n)<=T worst (n) 注:一般分析最坏情况复杂度,因为平均复杂度不容易找 下表能够比较直观的看出各个复杂度的运行时间 1 2 4 8 16 32 C(常函数) 1 1 1 1 1 1 logn 0 1 2 3 4 5 n 1 2 4 8 16 32 nlogn 0 2 8 24 64 160 n 2 1 4 16 64 256 1024 n 3 1 8 64 512 4096 32768 2 n 2 4 16 256 65536 4294967296 n! 1 2 24 40326 2092278988000 26313×10 33 所以一般情况下避免出现后两种复杂度 下图是几种复杂度的增长速度 (图片来自慕课,陈越姥姥那堂课) 复杂度分析的窍门: 若已知T 1 (n) = O(f 1 (n))和T 2 (n) = O(f 2 (n)),则 T 1 (n) + T 2 (n) = max(O(f 1 (n)),O(f 2 (n))) (就是O(f 1 (n))和O(f 2 (n))的最大值) T 1 (n) × T 2 (n) = O(f 1 (n) × f 2 (n)) for循环的T(n) =

JAVA中的数据结构

折月煮酒 提交于 2020-03-23 19:33:59
3 月,跳不动了?>>> 一, 红黑树所处数据结构的位置 : 在JDK源码中, 有treeMap和JDK8的HashMap都用到了红黑树去存储 红黑树可以看成B树的一种: 从二叉树看,红黑树是一颗相对平衡的二叉树 二叉树-->搜索二叉树-->平衡搜索二叉树--> 红黑树 从N阶树看,红黑树就是一颗 2-3-4树 N阶树-->B(B-)树 故我提取出了红黑树部分的源码,去说明红黑树的理解 看之前,理解红黑树的几个特性,后面的操作都是为了让树符合红黑树的这几个特性,从而满足对查找效率的O(logn) 二,红黑树特性,以及保持的手段 1,根和叶子节点都是黑色的 2,不能有有连续两个红色的节点 3, 从任一节点到它所能到达得叶子节点的所有简单路径都包含相同数目的黑色节点 这几个特效,个人理解就是规定了红黑树是一颗2-3-4的B树了,从而满足了O(logn)查找效率 保持特性的手段,通过下面这些手段,让红黑树满足红黑树的特性,如果要尝试理解,可以从2-3-4树的向上增长,后面有详细介绍 当然,这些改变也都是在O(logn)内完成的,主要改变方式有 1, 改变颜色 2, 左旋 3, 右旋 三,从JDK源码来理解 主要看我的注释,逻辑的理解 先看TreeMap //对treeMap的红黑树理解注解. 2017.02.16 by 何锦彬 JDK,1.7.51<br> <br>/** From

数据结构与算法系列十二(插入排序)

天涯浪子 提交于 2020-03-23 10:21:11
3 月,跳不动了?>>> 1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 上一篇: 数据结构与算法系列十一(冒泡排序) 中

C语言指针的概念

拥有回忆 提交于 2020-03-23 09:17:37
在计算机中,所有的数据都是存放在内存中的,一般把内存中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不一样,如int占用4个字节,char占用1个字节。为了正确地访问这些内存单元,必须为每个内存单元编上号。每个内存单元的编号是唯一的,根据编号可以准确地找到该内存单元。 内存单元的编号叫做地址(Address),也称为指针(Pointer)。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们用银行卡到ATM机取款时,系统会根据我们的卡号去查找账户信息,包括存取款记录、余额等,信息正确、余额足够的情况下才允许我们取款。在这里,卡号就是账户信息的指针, 存取款记录、余额等就是账户信息的内容。对于一个内存单元来说,单元的地址(编号)即为指针,其中存放的数据才是该单元的内容。 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。 设有字符变量c,其内容为 'K'(ASCII码为十进制数 75),c占用了0X11A号内存单元(地址通常用十六进数表示)。设有指针变量p,内容为 0X11A,这种情况我们称为p指向变量c,或说p是指向变量c的指针。 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针

[C]为什么发明指针?

故事扮演 提交于 2020-03-23 09:16:18
指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。 指针的基本概念 在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等, 在第二章中已有详细的介绍。为了正确地访问这些内存单元, 必须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时, 银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针,