数据结构和算法
数据结构和算法
xjanting
这个作者很懒,什么都没留下…
展开
-
必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序
冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序的示例: 冒泡排序的算法实现如下:【排序后,数组从小到大排列】 /**转载 2017-12-27 21:43:32 · 207 阅读 · 0 评论 -
java数据结构和算法
Java数据结构和算法(一)——简介 Java数据结构和算法(二)——数组 Java数据结构和算法(三)——冒泡、选择、插入排序算法 Java数据结构和算法(四)——栈 Java数据结构和算法(五)——队列 Java数据结构和算法(六)——前缀、中缀、后缀表达式 Java数据结构和算法(七)——链表 Java数据结构和算法(八)——递归 Java数据结构和算法(九)——高级排序...转载 2019-01-07 13:58:39 · 5331 阅读 · 4 评论 -
Java集合类,从源码解析底层实现原理
总体框架 Java集合总体框架及主要接口,抽象类分析 ArrayList底层实现和原理 Vector底层实现和原理 LinkedList底层实现和原理(也是queue的实现) ConcurrentLinkedQueue底层实现和原理(常用于并发编程) HashSet底层实现(是由HashMap实现)和原理 TreeSet底层实现(是由TreeMap实现)和原理 HashMap底...转载 2018-09-29 16:32:21 · 931 阅读 · 0 评论 -
JAVA数据结构和算法:第七章(树)
哈夫曼树 哈夫曼树是一种应用广泛的二叉树,可用来构造最优编码,用于信息传输、数据压缩等方面。 我们先来了解一些基本概念 路径:路径是指从一个结点到另一个结点之间的分支序列。 路径长度:是指从一个结点到另一个结点经过的分支数目。 结点的权:实际应用中,人们常常给树的某个结点赋予一个具有某种实际意义的实数,称该实数为这个结点的权。 树路径长度:从转载 2018-04-20 10:36:46 · 317 阅读 · 0 评论 -
JAVA数据结构和算法:第八章(排序)
排序 排序是我们程序中经常面对的问题,那么排序的严格定义是什么呢? 假设含有n个记录的序列为{r1,r2,r3…..,rn},其对应的关键字分别为{k1,k2,k3…..,kn},需确定1,2,…..,n的一种排列p1,p2,……..,pn,使其相应的关键字满足Kp1 内排序和外排序 根据在排序过程中待排序的记录是否全部被放置在内存中,将其分为:内排序和外排序。 内排转载 2018-04-20 10:34:48 · 246 阅读 · 0 评论 -
JAVA数据结构和算法:第六章(树)
树 树是n个结点的有限集。n=0时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2…..Tm,其中每一个集合本身又是一棵树,并且称为根的子树。如下图 结点: 树的结点包含一个数据元素及若干指向其子树的分支。 结点的度:结点拥有的子树数称为结点的度。 叶转载 2018-04-20 10:33:42 · 390 阅读 · 0 评论 -
JAVA数据结构和算法:第五章(串和KMP算法)
串 串是由零个或多个字符组成的有限序列,经常被称为字符串。一般记为s=”a1a2a3a4..an”. 零个字符的串被称为空串,长度为0. 串中任意个数的连续字符组成的序列被称为子串,包含子串的串被称为主串。例如lover是love的主串,love是lover的空串。 串的比较 字符串的比较是通过字符之间的ASCII编码值来确定大小的。比较两个字符串是否相等,必须是它们转载 2018-04-20 10:32:35 · 292 阅读 · 0 评论 -
JAVA数据结构和算法:第四章(HashMap和HashSet底层原理及实现)
HashMap内部原理及实现 什么是哈希表? 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,我们先来看一下其他数据结构的特点。 数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂转载 2018-04-20 10:31:39 · 194 阅读 · 0 评论 -
JAVA数据结构和算法:第三章(栈和队列)
栈 栈是限制仅在一个位置上进行插入和删除的线性表。允许插入和删除的一端为末端,称为栈顶。另一端称为栈底。不含任何数据元素的栈称为空栈。栈又成为后进先出(LIFO)表,后进入的元素最先出来。 首先,栈是一个线性表,元素之间具有线性关系,即前驱后继关系,其次,它是一种特殊的线性表,只能在表尾进行插入和删除操作。栈的插入操作,叫作进栈(push),删除操作,叫作出栈(pop).转载 2018-04-20 10:30:32 · 218 阅读 · 0 评论 -
JAVA数据结构和算法:第二章(表)
表 线性表的定义 线性表,从名字上来看,像线连起来的表。每个元素都是连起来的,比如在体育课按照老师定好的队列排队的时候,有一个打头,一个收尾,中间的每个人都知道前面是谁,后面是谁,就像一根线将他们联系在一起,就可以称之为线性表。 这时候我们来看几个关键点,首先元素之间是有顺序的,并且第一个元素无前驱,最后一个元素无后继,其他的元素都有且只有一个前驱和后继,这样才能形成线性表。转载 2018-04-20 10:29:34 · 253 阅读 · 0 评论 -
JAVA数据结构和算法:第一章(时间复杂度和空间复杂度)
数据结构基础概念 不论是哪所大学,数据结构和算法这门课都被贯上无趣、犯困、困难的标签,我们从最基础最通俗的语言去说起,保证通俗易懂。 数据结构到底是什么呢?我们先来谈谈什么叫数据。 数据:数据是描述客观事物的数值、字符以及能输入给计算机且能被计算机处理的各种符号集合。 简单的来说,数据就是计算机化的信息。 数据元素:是组成数据的基本单位,在计算机中通常被作为一个整体进行转载 2018-04-20 10:27:59 · 211 阅读 · 0 评论 -
O(1), O(n), O(logn), O(nlogn) 的区别
在描述算法复杂度时,经常用到O(1), O(n), O(logn), O(nlogn)来表示对应复杂度程度, 不过目前大家默认也通过这几个方式表示空间复杂度 。 那么,O(1), O(n), O(logn), O(nlogn)就可以看作既可表示算法复杂度,也可以表示空间复杂度。 大O加上()的形式,里面其实包裹的是一个函数f(),O(f()),指明某个算法的耗时/耗空间与数据增长量之间的...原创 2019-07-09 11:09:16 · 1245 阅读 · 0 评论