自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 8种常用的排序算法(Java版)

目前常用的排序算法有8种,下图为各种排序算法的分类,方便记忆。下面详细说明每一种算法的思想(每一种默认为从小到大排序):1. 直接插入排序该排序算法是在已经有序的序列中寻找待插入数值的位置,然后将该数值插入即可。如上图所示,arr为待排序数组,将每一个待排序的数字与之前已经排好序的序列进行比较,将所有比它大的数都后移一位,后移完成后,空出来的位置即为该数字所在的位置。 public ...

2019-06-26 11:59:04 309

原创 Java数据结构之哈夫曼树

背景由于目前常用的图像、音频等多媒体的信息量巨大,因此必须采用数据压缩技术来存储和传输。数据压缩技术通过对数据进行重新编码来压缩存储,以便减少数据占用的存储空间,在使用时再进行解压缩,恢复数据的原有特性。压缩方法主要由有损压缩和无损压缩。有损压缩是指压缩过程中可能会丢失数据信息;无损压缩是指压缩存储数据的全部信息,保证解压后的数据不丢失。哈夫曼编码是一种无损压缩技术。基本概念结点间路径:...

2019-05-17 09:34:28 281

原创 Java数据结构之二叉树的建立

基本概念二叉树的遍历可使非线性结构的树转换成线性序列。先序遍历序列和后序遍历序列反应父结点和孩子结点间的层次关系,中序遍历序列反应兄弟节点间的左右次序关系。因为二叉树是具有层次关系的结点构成的非线性结构,并且每个结点的孩子结点具有左右次序,所以已知一种遍历序列无法确定唯一的二叉树,只有同时知道中序和先序遍历序列,或同时知道中序和后续遍历序列,才能确定结点的层次关系和结点的左右次序,才能确定唯一的...

2019-05-16 17:53:54 688

原创 Java数据结构之二叉树遍历

二叉树遍历指沿着魔调搜索路径访问二叉树的结点,每个结点被访问的次数有且仅有一次。先序遍历先遍历根节点,再遍历左子树,最后遍历右子树,如图1。递归算法递归算法结构简单,易于实现,但是在时间上开销较大,运行效率较低。 /** * @param BiTreeNode root 根结点 */ public void preOrder(BiTreeNode root) { if (...

2019-05-16 17:30:26 299

原创 Java数据结构之二叉树

基本概念普通二叉树:二叉树是特殊的有序树,当n=0时为空二叉树。二叉树的每个结点最多只有两颗子树,子树也为二叉树,互不相交且有左右之分,分别称为左二叉树和右二叉树。满二叉树:一种特殊的二叉树,要求除叶结点外的其他结点都具有两个子树,并且所有的叶结点在同一层,如图1。完全二叉树:一种特殊的二叉树,若完全二叉树具有n个结点,它要求n个结点与满二叉树的前n个结点具有完全相同的逻辑结构,如图2。...

2019-05-16 10:07:30 286

原创 Java数据结构之树

基本概念树是数据元素间具有层次关系的非线性结构,是由n个结点构成的有限集合,结点数为0的树叫空树。一个非空树有且仅有一个根结点,其余结点可以分为m个不相交的有限集合,每个集合又构成一棵树,叫根结点的子树。树具有“一对多”的逻辑对应关系。树的术语结点:构成树的基本单位结点的路径:从根结点到该结点所经过结点的顺序排列路径的长度:路径中包含的分支数结点的度:结点拥有的子树的数目树的度:树...

2019-05-16 08:55:13 902

原创 Java数据结构之关键路径

基本概念AOE网:在AOV网中,当弧上带有权值时,称这种有向网为边活动网,简称AOE网。在AOE网中,弧指向事件表示该弧代表的活动已经完成,弧从事件出发表示弧代表的活动开始进行,故AOE网中同样不能有回环存在。源点:AOE网常用来表示工程的进行,表示工程开始事件的顶点的入度为0,称为源点。汇点:表示工程结束事件的顶点的出度为0,称为汇点。一个AOE网是只有一个源点和一个汇点的有向无环...

2019-05-15 17:49:45 1177

原创 Java数据结构之图的遍历

核心思想图的遍历指从图的任意一个顶点出发对图的每个顶点访问且仅访问一次的过程,因为图中可能存在回路,为了避免对一个顶点的重复访问可以增设一个辅助数组visited,初始化为0,一旦第i个顶点被访问,置visited[i]=1。因此,图的遍历需要考虑如下三点:指定遍历的第一个顶点。由于一个顶点和多个顶点相邻,需要在多个邻接顶点间确定访问次序。由于图中存在回路,必须对访问过的顶点做标记,防...

2019-05-15 10:10:33 1366

原创 Java数据结构之队列

基本概念队列是一种特殊的线性表,其插入操作只能在表的尾部进行,叫入队,这一端被称为队尾,删除操作只能在表的头部进行,叫出队,这一端被称为队首。没有数据元素的队列称为空队列。队列具有FIFO(先进先出)的特点,队列的底层数据结构可以用数组来实现。队列的抽象数据类型package ch03;public interface IQueue { public void clear(); pu...

2019-05-15 10:07:11 1170

原创 Java数据结构之邻接表

基本概念邻接表是由一个顺序存储结构的顶点表和多个链式存储的边表组成的。玲姐表类描述边结点类package cho6;/** * 邻接表边结点类 * @author asus * */public class ArcNode { public int adjVex;//存放与当前顶点邻接的顶点在图中的位置 public int value;//边的权值 public Arc...

2019-05-14 17:09:33 1200

原创 Java数据结构之邻接矩阵

基本概念图的存储结构需要保存顶点的值及与顶点相关联的顶点和边的信息。假设图G=(V,E)具有n个顶点,则可以构建矩阵A[n][n]来保存图中的数据关系,称A[n][n]为邻接矩阵。定义如下:...

2019-05-14 16:50:13 1320

原创 Java数据结构之图

基本概念图是一种数据元素间具有“多对多”关系的非线性数据结构,由顶点集V和边集E组成,记作G=(V,E)。无向边 e=(u,v):表示顶点u到顶点v的一条无向边,简称边,其中(u,v)=(v,u)。有向边 e=<u,v>:表示顶点u到顶点v的一条有向边,也叫弧,其中u叫始点或弧尾,v叫终点或弧头,<u,v>!=<v,u>。零图:指E为空集的图,即图中只...

2019-05-14 11:24:19 790

原创 Java数据结构之拓扑排序

基本概念活动:在生产实践,基本上所有的工程都可以再分解成更小的自工程,这些自工程称为“活动”。 活动之间通常存在一些限制,即某些活动必须在一些活动结束后才能进行。顶点活动网(AOV–Activity On Vertex):用无权值的有向图表示活动之间的制约关系,顶点表示活动,弧表示活动之间的优先关系。如图1为实际生活中的一个AOV网 若在AOV网中存在一条从顶点A指向顶点B的弧,...

2019-05-07 18:17:59 601

原创 Java数据结构之最短路径

问题背景最短路径是面向图的一种非常常见的问题,它是具有实际意义的。比如国家铺铁路,如何使某一个省到其他省的距离最短;或者出去旅游,如何使旅游路线最短。这些问题就是在图的数据结构下求最短路径的问题。通常,求图的最短路径有两种情况,一种是求某一个顶点到其他各顶点的最短路径;另一种是求图中任意两个顶点的最短路径。这里介绍两种算法分别对应上述情况,即迪杰斯特拉算法(Dijkstra算法)和弗洛伊德算法(...

2019-05-07 17:35:48 729

原创 Java数据结构之克里斯卡尔算法(Kruskal算法)

介绍Kruskal算法与Prim算法不同,Prim是以顶点为向导,通过遍历顶点不断寻找与之相连的最小的权值边,从而找到最小生成树。Kruskal算法是以边为向导,依次找出权值最小的边建立最小生成树,每次新增的边要保证不能使生成树构成回路,知道遍历完所有的边为止。核心思想Kruskal的核心算法即在如何验证所添加的边是否与已添加的边构成回路,从而进行边的取舍。如图1所示,根据左图构建数组edg...

2019-04-30 20:31:57 1670

原创 Java数据结构之普里姆算法(Prim算法)

介绍普里姆算法是图结构中寻找最小生成树的一种算法。所谓生成树,即为连通图的极小连通子图,其包含了图中的n个顶点,和n-1条边,这n个顶点和n-1条边所构成的树即为生成树。当边上带有权值时,使生成树中的总权值最小的生成树称为最小代价生成树,简称最小生成树。最小生成树不唯一,且需要满足一下准则:只能使用图中的边构造最小生成树具有n个顶点和n-1条边每个顶点仅能连接一次,即不能构成回路核心...

2019-04-30 20:30:44 2230 3

原创 Java数据结构之栈

栈的基本概念栈是一种特殊的线性表,其插入、删除操作只能在表的尾部进行。其允许插入、删除操作的一端成为栈顶,另一端称为栈尾,插入操作叫入栈,删除操作叫出栈,具有先进后出的特点(FILO)。栈的抽象数据类型描述栈中的数据元素和数据间的逻辑关系与线性表相同,是由n个具有相同数据类型的数据元素构成的有限序列。package ch03;public interface IStack { pub...

2019-04-23 21:49:59 492

原创 Java数据结构之线性表

线性表基本概念线性表是其组成元素间具有线性关系的一种线性结构,是由n个数据类型相同的元素构成的有限序列。其具有“一对一”的逻辑关系,与位置有关,除了头尾元素之外,每一个元素都有唯一的前驱元素和后继元素,即元素ai前面的元素为ai-1,后面的元素为ai+1。抽象数据类型线性表的抽象数据类型可以用接口描述,其中列举了一些基本的功能,可以自己根据需求扩充:package ch02;publi...

2019-04-18 22:19:15 4827 1

原创 Java数据结构——基础篇

一、基本概念数据与数据结构数据能够被计算机程序识别、存储、加工和处理的描述客观事物的数字等符号集合的总称。如“书籍信息表”中的所有信息均为数据。数据项具有独立含义的、数据不可分割的最小标识单位,是数据元素的组成部分,也称字段和域。(分为简单数据项和组合数据项)数据元素数据的基本单位,又称为元素、节点、定点和记录,是一个数据整体中可以标识和访问的数据单元数据对象性质相同的数据元...

2019-04-15 10:56:48 160

原创 《程序员的自我修养》读书心得——第二章 谈实践与认知

一、突破程序员思维程序员思维是程序员从开始学习“Hello World”开始就逐渐培养起来的一种思维模式,你会发现程序员在看待世界的时候会经常从计算机的角度去描述世界,这能帮助程序员更好的构建代码。那为什么要突破程序员思维呢?1、为什么要突破程序员思维很多程序员都有过这样的抱怨:“为什么他的技术还没有我好,反而能爬到我上面去?”那么很可能他已经突破了程序员思维,而你仍旧在程序员的世界里打转...

2019-04-14 21:21:48 373

原创 《程序员的自我修养》读书心得——第一章 谈职业生涯

这本书是陈逸鹤老师从一个成熟的成员、一名IT管理者的角度,以杂记的形式写的关于国内程序员职业生涯、个人发展、编程中的实践与认知和设计等方面的经验方法与思考感悟,对于各个阶段的开发人员来说都是由一定的启发作用。...

2019-04-09 16:43:46 618

原创 我的第一篇CSDN博客

这是我的第一篇CSDN博客,刚刚开始写技术博客也不知道该写些什么,就先聊聊我写博客的由头吧。最早接触CSDN是从本科开始的,那时候写代码就经常在CSDN上参考各路大神博文,但是从来没有萌生过想要写点什么念头,总觉的自己很菜,写不出什么像样的东西。后来升了研究生,接触的项目多了,学习和使用的代码也多了,慢慢觉得自己有点东西,可以写些什么了。直到最近,看了陈逸鹤老师的《程序员的自我修养》,我决定开始...

2019-04-08 15:49:25 126

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除