![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 91
数据结构
衍射
我看青山多妩媚,料青山看我应如是
展开
-
Java常用算法三:01背包问题
文章目录一、动态规划1、简介2、应用场景:背包问题二、01背包问题1.1 分析过程1.2 java实现01背包问题求解笔记来源:尚硅谷一、动态规划1、简介动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。(即下一个原创 2020-08-03 11:49:38 · 702 阅读 · 0 评论 -
Java常用算法二:分治法
文章目录一、分治算法的基本步骤二、分治算法解决汉诺塔问题2.1 汉诺塔的规则:2.2 使用分治算法笔记参考:尚硅谷分治法就是把很复杂的问题分而治之,把一个很大的问题分成几个很小的问题,再把这几个很小的问题分成很多个更小的问题。直到子问题可以简单地直接求解,那么原问题的解就是子问题解的集合。分治算法可以解决:二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表汉诺塔一、分治算法的基本步骤分治法在每一层递归上都有三个步骤:分解:将原问题分解为原创 2020-08-02 21:44:23 · 244 阅读 · 0 评论 -
JAVA常用算法一:二分查找【递归 or 非递归】
文章目录一、Java实现二分查找【递归】二、Java实现二分查找【非递归】三、测试一、Java实现二分查找【递归】 //递归使用二分查找 public static int binarySearchRecursion(int[] arr, int target, int left, int right) { if(left > right) return -1; int mid = (left + right) / 2; int midVal = arr[mid]; if(原创 2020-08-02 20:23:14 · 262 阅读 · 0 评论 -
java Map及其实现类的底层原理
文章目录一、Map接口及其多个实现类的对比二、Map中存储的key-value特点三、HashMap在JDK7中的底层原理四、HashMap在JDK8中的底层原理五、HashMap在JDK7中的底层源码5.1 构造器5.2 put方法六、HashMap在JDK8的源码分析6.1 构造器6.2 put七、LinkedHashMap的底层实现笔记来源: 尚硅谷一、Map接口及其多个实现类的对比首先看下Map及其实现类的类图关系:Map:双列数据,存储key-value对的数据|实现类 |含义 |原创 2020-07-30 18:58:12 · 1002 阅读 · 0 评论 -
java实现数据结构-堆排序
文章目录一、堆排序的基本介绍二、堆排序的基本思想三、堆排序的实现3.1 堆排序的思路3.2 堆排序的java实现笔记来源: 尚硅谷一、堆排序的基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn), 它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆,注意: 没有要求结点的左孩子的值和右孩子的值的大小关系每个结点的值都小于或等于其左右孩子结点的值,称为小顶原创 2020-07-29 15:15:32 · 176 阅读 · 0 评论 -
数据结构-B树
文章目录一、概念二、查找三、插入平衡二叉树不会退化为线性结构,所以查找效率高,在此基础上设计出了B树一、概念B树又称多路平衡查找树,B树中所有结点的孩子结点数的最大值称为B树的阶。一棵m阶B树或为空树,或为满足如下特性的m叉树:树中每个结点至多有m棵子树(即至多含有m-1个关键字)若根结点不是终端结点,则至少有两棵子树除根结点外的所有非叶结点至少有⌈m/2T⌉棵子树(即⌈m/2⌉-1 个关键字)非叶子节点结构:所有叶子节点(失败节点)都出现在同一层次上,并不带任原创 2020-07-02 10:45:02 · 202 阅读 · 0 评论 -
数据结构之查找-顺序查找,折半查找,分块查找
文章目录一、顺序查找1.1 无序表的顺序查找1.2 有序表的顺序查找二、折半查找三、分块查找一、顺序查找顺序查找又称线性查找,主要用于在线性表中进行查找。1.1 无序表的顺序查找对无序线性表进行顺序查找,查找失败时要遍历整个线性表int search_seq_u(int elems[], int key) { int i; for(i = elems.length-1; i >=0 && elems[i]!=key; i--); return原创 2020-07-02 10:12:57 · 2003 阅读 · 0 评论 -
最小生成树的java实现
文章目录一、概念二、算法2.1 Prim算法2.2 Kruskal算法笔记来源:中国大学MOOC王道考研一、概念连通图:图中任意两点都是连通的,那么图被称作连通图生成树:连通图包含全部顶点的一个极小连通子图最小生成树:在含有n个顶点的带权无向连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树(不一定唯一)。性质1:不一定唯一性质2:如果所有边的权重都不相同,则一定唯一性质3:如果连通图只有n-1条边,则最原创 2020-07-01 16:30:56 · 2765 阅读 · 0 评论 -
11. 王道考研-二叉树的实现
文章目录一、二叉树的顺序存储二、二叉树的链式存储三、二叉树的遍历3.1递归算法3.2 非递归算法3.3 层次遍历3.4 由遍历序列构造二叉树3.5 线索二叉树一、二叉树的顺序存储完全二叉树:非完全二叉树(先要补成完全二叉树)二、二叉树的链式存储typedef char ElemType;typedef struct node { ElemType data; struct node *lchild; struct node *r原创 2020-06-24 11:31:56 · 601 阅读 · 1 评论 -
10. 王道考研-树与二叉树
文章目录一、树的概念二、树的性质三、二叉树3.1 特殊二叉树3.2 二叉树的性质一、树的概念树是一种逻辑结构,是n(n>=0)个节点的有限集合,n=0时,称为空树,而任意的非空树满足:1) 有且仅有一个特定的称为根的节点2) 当n> 1时,其余结点可分为m (m>0)个互不相交的有限集合,其中每一个集合本身又是一棵树,称为根结点的子树。基本术语:森林是m(m>=0)棵互不相交的树的集合二、树的性质树的结点数 = 所有节点的度数+1 = 边数 + 1度原创 2020-06-24 11:30:58 · 268 阅读 · 0 评论 -
9.特殊矩阵的压缩存储
压缩存储:指多个值相同的元素只分配一个存储空间, 对零元素不分配存储空间。特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。特殊矩阵的压缩存储:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布、值相同的多个矩阵元素压缩存储到一个存储空间上。一、对称矩阵将对称矩阵存放为一维数组eg:若要取a[1,2] ,实则取一维数组的b[1](k=2(2-1)/2 + 1-1 = 1)二、三角矩阵前n(n+1)/2的空间存放的是非c的元素,.原创 2020-06-24 11:30:15 · 323 阅读 · 0 评论 -
8.栈和队列的应用
文章目录一、栈的应用1.1 括号匹配问题2.2 表达式求值问题2.3 递归一、栈的应用1.1 括号匹配问题怎样判断是不是匹配序列呢?算法思想:1)初始一个空栈,顺序读入括号。2)若是右括号,则与栈顶元素进行匹配●若匹配,则弹出栈顶元素并进行下一个元素●若不匹配,则该序列不合法3)若是左括号,则压入栈中4)若全部元素遍历完毕,栈中非空则序列不合法代码如下:#include <malloc.h>#include <stdio.h>#include <原创 2020-06-23 12:12:16 · 132 阅读 · 0 评论 -
7.王道考研数据结构-队列
文章目录一、队列的基本操作二、队列(顺序队)的实现2.1 队列的初始化2.2 入队和出队三、循环队列(顺序队)3.1 循环队列的初始化3.2 判断队空3.3 入队3.4 出队四、链队4.1 链队的初始化4.2 判断队列是否为空4.3 入队和出队一、队列的基本操作二、队列(顺序队)的实现#define MaxSize 50#define ElemType inttypedef struct{ int front;//队首 int rear;//队尾 Elem原创 2020-06-23 11:08:47 · 305 阅读 · 0 评论 -
6.王道考研数据结构-栈
文章目录一、栈的基本操作二、栈的顺序存储结构2.1 栈的初始化2.2 判断栈空2.3 栈的进栈2.4 栈的出栈2.5 读出栈顶元素2.6 共享栈三、栈的链式存储结构一、栈的基本操作二、栈的顺序存储结构#define MaxSize 50#define ElemType inttypedef struct{ ElemType data[MaxSize];//保存数据的数组 int top;//指向栈顶数组下标(最初为-1)}SqStack;2.1 栈的初始化void I原创 2020-06-23 09:54:04 · 305 阅读 · 0 评论 -
5.顺序表和链表的最值,逆置和归并有序表
一、顺序表和链表的数据结构。顺序表:#include <malloc.h>#include <stdio.h>#include <stdlib.h>#define MaxSize 50#define ElemType int// 顺序表typedef struct { ElemType *data; int length;}SqList;void InitList(SqList *&L,ElemType a[],int n原创 2020-06-23 09:05:17 · 321 阅读 · 0 评论 -
4.特殊链表
一、双链表双链表需要注意的是插入和删除操作插入S->next = p->nextp->next->prior = SS->prior = p->nextp->next = S(这个必须放在最后)删除(删除q)p->next = q->nextq->next->prior = pfree(q)二、循环链表循环链表分为:循环单链表[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上原创 2020-06-23 09:04:50 · 163 阅读 · 0 评论 -
3. 线性表的链式结构
一、链表的声明typedef struct { ElemType data; struct LNode *next;}LNode, *LinkList;二、头插法s->next = L->nextL->next = s//头插法void CreateListF(LinkNode *&L,ElemType a[],int n){ L=(LinkNode *)malloc(sizeof(LinkNode)); L->next=NU.原创 2020-06-22 11:26:36 · 134 阅读 · 0 评论 -
2. 线性表的顺序结构
线性表是具有相同类型的n(n>=0)个元素的有限序列,其中n为表长,当n=0时,该表为空表线性表的九种基本操作:一、顺序表的定义我们采用数组动态分配的方法#define MaxSize 50#define ElemType inttypedef struct { ElemType *data; //数组的空间大小动态分配 int length;}SqList;初始化时动态分配地址空间:void InitList(SqList *&L,ElemTyp.原创 2020-06-22 10:19:12 · 78 阅读 · 0 评论 -
1. 算法评价
好的算法应该具有:正确性可读性健壮性(对于非法数据进行处理)4. 效率与存储量一、算法效率的度量语句频度:该条语句可能重复执行的次数T(n):所有语句的频度之和,其中n为问题的规模时间复杂度T(n)=O((f(n)),其中O表示T(n)与f(n)在n->正无穷时为同阶无穷大.二、时间复杂度上图这个例子:int sum = 0 的语句频度为1第一个循环的语句频度为n第二个循环的语句频度为n^2∴ T(n) = n^2 + n + 1根据加法规则:O.原创 2020-06-21 19:39:42 · 127 阅读 · 0 评论