数据结构与算法
JUN_LLLL
这个作者很懒,什么都没留下…
展开
-
模拟斗地主洗牌和发牌
集合框架的综合应用代码示例:模拟斗地主洗牌和发牌package cn.itcast_04;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;/* * 思路: * A:创建一个HashMap集合 * B:创建...原创 2019-10-30 14:28:55 · 187 阅读 · 0 评论 -
图学习笔记
1、图 图中的元素我们就叫作顶点;图中的一个顶点可以与任意其他顶点建立连接关系叫作边;跟顶点相连接的边的条数叫作度;边有方向的图叫作**“有向图**”,边没有方向的图就叫作“无向图” ;顶点的入度,表示有多少条边指向这个顶点 ;顶点的出度,表示有多少条边是以这个顶点为起点指向其他顶点 ;带权图,每条边都有一个权重 。2、图的存储2.1 邻接矩阵 对于无向图来说,如果顶...原创 2019-11-25 14:49:16 · 182 阅读 · 0 评论 -
堆学习笔记
1、堆堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。1.1 堆的实现完全二叉树比较适合用数组来存储! 1.1 插入元素往堆中插入一个元素后,需要继续满足堆的两个特性。 如果我们把新插入的元素放到堆的最后 ,可能不满足第二个特效,需要进行堆化。堆化非常简单,就是顺着节点所在的路径,向上或者向下,对比,然后交换。1.2 删除堆顶元素从...原创 2019-11-25 14:44:03 · 149 阅读 · 0 评论 -
二叉树学习笔记
1、树(Tree)每个元素我们叫作“节点”;用来连线相邻节点之间的关系,叫作“父子关系” 。A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节点的父节点是同一个节点,互称为兄弟节点。没有父节点的节点叫作根节点(E);没有子节点的节点叫作叶子节点或者叶节点(G…L)2、二叉树二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个...原创 2019-11-25 14:41:37 · 570 阅读 · 0 评论 -
哈希学习笔记
1、散列思想散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。2、散列函数它是一个函数。我们可以把它定义成hash(key),其中 key 表示元素的键值,hash(key) 的值表示经过散列函数计算得到的散列值。三点散列函数基本要求:散列函数计算得到的散列值是一个非负整数;如果 key1 = key...原创 2019-11-25 14:36:36 · 300 阅读 · 0 评论 -
查找学习笔记
1、二分查找二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0 。1.1 O(logn) 惊人的查找速度public int bsearch(int[] a, int value) { int low = 0; int high = a.length; wh...原创 2019-11-25 14:34:58 · 179 阅读 · 0 评论 -
排序学习笔记
1、如何分析一个“排序算法”?1.1 排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数 、低阶比较次数和交换(或移动)次数1.2 排序算法的内存消耗1.3 排序算法的稳定性 如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。2、复杂度O(n2)的排序2.1 冒泡排序(Bubble Sort)// 冒...原创 2019-11-25 14:20:19 · 157 阅读 · 0 评论 -
递归学习笔记
一、递归学习笔记递归指的是在函数的定义中使用函数自身的方法。周末你带着女朋友去电影院看电影,咱们现在坐在第几排啊?于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传回来。到你前面的人告诉你他在哪一排,于是你就知道答案了。这就是...原创 2019-11-25 14:15:28 · 370 阅读 · 0 评论 -
栈和队列学习笔记
文章目录一、栈学习笔记1.1 如何实现一个“栈”?1.2 支持动态扩容的顺序栈二、队列学习笔记三、练习栈练习队列练习一、栈学习笔记当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。1.1 如何实现一个“栈”?在入栈和出栈过...原创 2019-11-25 14:12:32 · 234 阅读 · 0 评论 -
链表学习笔记
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针将一组零散的内存块串联起来实现的。1、单链表为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址,记录下个结点地址的指针叫作后继指针 next:头结点用来记录链表的基地址,可以遍历得到整条链表。尾结点的指针不是指向下一个结点,而是指向一个空地址 NULL,表示这是链表上...原创 2019-11-14 15:17:35 · 215 阅读 · 0 评论 -
数组学习笔记
数组学习笔记1、数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表:数据排成像一条线一样的结构,每个线性表上的数据最多只有前和后两个方向;连续的内存空间和相同类型的数据:实现了随机访问,但是这个让数组的很多操作变得非常低效,比如插入数据,需要做大量的数据搬移工作。Notes:数组适合查找操作,但是查找的时间复杂度并不为 O(1),使用二...原创 2019-11-12 14:25:10 · 163 阅读 · 0 评论 -
时间、空间复杂度学习笔记
文章目录1、事后统计法2、大 O 复杂度表示法3、时间复杂度分析4、几种常见时间复杂度实例分析1、O(1)2、O(logn)、O(nlogn)3、O(m+n)、O(m*n)4、内容小结5、空间复杂度分析6、复杂度分析进阶1、最好、最坏情况时间复杂度2、平均情况时间复杂度3、均摊时间复杂度1、事后统计法把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小,并且能够正确评估执行效...原创 2019-11-06 14:31:25 · 414 阅读 · 0 评论