数据结构与算法
文章平均质量分 86
Randy_0918
软件开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法(Java描述)-1、数据结构与算法总述以及抽象数据类型
之前在学校就已经学习过数据结构,但那时都是用C语言来描述的,现在本着复习的目的,结合平时收藏的笔记,重新用Java来描述一下!一起学习,一起进步!(不是大牛,如有错误,还请指正!)一、什么是算法?算法:Algorithm,是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。 二、算法的特性有穷性:指令序列是有限的确定性:每条语句的含义明原创 2017-10-19 14:01:21 · 468 阅读 · 0 评论 -
数据结构与算法(Java描述)-12、串的模式匹配算法(Brute-Force与KMP算法)
一、串的模式匹配操作在字符串匹配问题中,我们期待察看S串中是否含有串T(模式串)。其中串S被称为主串,串T被称为子串。如果在主串中查找到子串,则称为模式匹配成功,返回模式串的第一个字符在主串中出现的位置。如果在主串中未找到子串,则称为模式匹配失败,返回-1。Brute-Force与KMP算法是两种最经典的模式匹配算法。二、Brute-Force算法也称简单匹原创 2017-10-24 11:03:09 · 531 阅读 · 0 评论 -
数据结构与算法(Java描述)-13、对象数组以及MyVector类、MySet类实现
一、数组数组是n(n≥1)个相同数据类型的数据元素a0,a1,a2,...,an-1构成的占用一块地址连续的内存单元的有限集合。数组通常以字节为内部计数单位。对一个有n个数据元素的一维数组,设a0是下标为0的数组元素,Loc(a0)是a0的内存单元地址,k是每个数据元素所需的字节个数,则数组中任一数据元素ai的内存单元地址Loc(ai)可由下面公式求出: Loc(ai) =原创 2017-10-24 11:27:44 · 690 阅读 · 0 评论 -
数据结构与算法(Java描述)-14、矩阵类以及对称矩阵的压缩算法
一、矩阵类矩阵是工程设计中经常使用的数学工具。 矩阵的运算主要有矩阵加、矩阵减、矩阵乘、矩阵转置、矩阵求逆等。矩阵用两维数组处理最为方便。 二维数组存储结构。 实现:import java.util.Random;//自定义矩阵类public class MyMartrix { //矩阵数组 int martrix[][]; //随机对象 R原创 2017-10-24 12:32:33 · 890 阅读 · 0 评论 -
数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
一、稀疏矩阵对一个m×n的矩阵,设s为矩阵元素个数的总和,有s=m*n,设t为矩阵中非零元素个数的总和,满足t<<s的矩阵称作稀疏矩阵。符号“<<”读作小于小于。简单说,稀疏矩阵就是非零元素个数远远小于元素个数的矩阵。相对于稀疏矩阵来说,一个不稀疏的矩阵也称作稠密矩阵。 二、稀疏矩阵的压缩存储稀疏矩阵的压缩存储方法,是只存储矩阵中的非零元素。稀疏矩阵中每个非零元素及原创 2017-10-24 12:43:52 · 5100 阅读 · 1 评论 -
数据结构与算法(Java描述)-16、递归算法及其应用
一、递归的概念若一个算法直接地或间接地调用自己本身,则称这个算法是递归算法。问题的定义是递归的 例如:阶乘函数的定义 1 当n=1时 n! = n*(n-1)! 当n>1时递归算法的设计方法:适宜于用递归算法求解的问题的充分必要条件原创 2017-10-26 17:49:04 · 270 阅读 · 0 评论 -
数据结构与算法(Java描述)-17、递归转化成非递归算法以及迷宫算法
一、递归算法的效率分析我们以斐波那契数列递归函数的执行效率为例来讨论递归算法的执行效率问题。斐波那契数列Fib(n)的递推定义是:fib(5)的递归调用树:二、递归算法转换为非递归算法一般来说,如下两种情况的递归算法可转化为非递归算法:(1)存在不借助堆栈的循环结构的非递归算法,如阶乘计算问题、斐波那契数列的计算问题、折半查找问题等(2)原创 2017-10-26 20:48:35 · 816 阅读 · 0 评论 -
数据结构与算法(Java描述)-18、树,二叉树以及二叉树的遍历,翻转二叉树
一、树的概念树是由n(n≥0)个结点构成的满足以下条件的结点集合:(1)当n>0时,有一个特殊的结点称为根结点,根结点没有前驱结点;(2)当n>1时,除根结点外的其他结点被分成m(m>0)个互不相交的集合T1,T2,…, Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵结构和树结构类同的子树。结点:结点由数据元素和构造数据元素之间关系的指针组成。 结点的度:结点所拥有的子树的个...原创 2018-07-12 20:42:31 · 286 阅读 · 0 评论 -
数据结构与算法(Java描述)-19、哈夫曼树、哈夫曼编码算法
一、哈夫曼树的基本概念在一棵二叉树中,定义从A结点到B结点所经过的分支序列叫做从A结点到B结点的路径。从A结点到B结点所经过的分支个数叫做从A结点到B结点的路径长度从二叉树的根结点到二叉树中所有叶结点的路径长度之和称作该二叉树的路径长度。如果二叉树中的叶结点都带有权值,我们可以把这个定义加以推广。设二叉树有n个带权值的叶结点,定义从二叉树的根结点到二叉树中所有叶结点的路径长度与相应叶结点权值的乘积...原创 2018-07-13 23:59:07 · 1444 阅读 · 0 评论 -
数据结构与算法(Java描述)-11、串的基本概念以及串存储结构
一、串的基本概念串(也称作字符串)是由n(n≥0)个字符组成的有限序列。 一个串中任意个连续的字符组成的子序列称为该串的子串。 包含子串的串称为该子串的主串。一个字符在一个串中的位置序号(为大于等于0的正整数)称为该字符在串中的位置。当且仅当这两个串的值完全相等时,称这两个串相等。二、串抽象数据类型数据集合:串的数据集合可以表示为字符序列s0, s1,… , s原创 2017-10-23 17:10:08 · 661 阅读 · 0 评论 -
数据结构与算法(Java描述)-10、链式队列以及优先级队列的应用
一、链式队列链式存储结构的队列称作链式队列。链式队列的存储结构如下图所示二、链式队列的实现//队列接口public interface Queue { //入队 public void append(Object obj) throws Exception; //出队 public Object delete() throws Exception原创 2017-10-23 16:21:44 · 362 阅读 · 0 评论 -
数据结构与算法(Java描述)-2、算法的设计目标与性能指标
一、算法的设计目标1、正确性:满足具体问题的解,基本目标。2、可读性:有利于人去理解算法。3、健壮性:输入非法数据,能适当做出处理,不产生莫名其妙的输出。4、高效性:包括时间的高效性和空间的高效性。二、算法性能指标1、算法的时间效率也称为时间复杂度。算法的时间复杂度反映了算法执行的时间长短。度量一个算法在计算机上执行的时间通常有两种方式:(1原创 2017-10-19 14:48:27 · 1738 阅读 · 0 评论 -
数据结构与算法(Java描述)-3、线性结构与顺序表
一、线性结构定义如果一个数据元素序列满足:(1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素;(2)第一个数据元素没有前驱数据元素;(3)最后一个数据元素没有后继数据元素。 则称这样的数据结构为线性结构。二、线性表抽象数据类型线性表抽象数据类型主要包括两个方面:即数据集合和该数据集合上的操作集合。数据集合可以表示为a0,a1,a2,...原创 2017-10-20 13:36:52 · 373 阅读 · 0 评论 -
数据结构与算法(Java描述)-4、单链表以及单链表的应用
一、链表类型根据链表的构造方式的不同可以分为:1.单向链表2.单向循环链表3.双向循环链表二、单链表结构单链表是构成链表的每个结点只有一个指向直接后继结点的指针。单链表的表示方法:单链表中每个结点的结构:单链表有带头结点结构和不带头结点结构两种。我们把指向单链表的指针称为单链表的头指针。头指针所指的不存放数据元素的第一个结点称作头结点。存原创 2017-10-20 13:56:04 · 318 阅读 · 0 评论 -
数据结构与算法(Java描述)-5、循环链表仿真链表以及循环链表应用
一、单向循环链表单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环。和单链表相比,循环单链表的长处是从链尾到链头比较方便。当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表。 和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作原创 2017-10-21 09:37:07 · 404 阅读 · 0 评论 -
数据结构与算法(Java描述)-6、栈的基本概念以及顺序栈的实现
一、堆栈的基本概念堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作。堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈从输入和输出数据元素的位置关系看,堆栈的功能和原创 2017-10-21 10:13:02 · 333 阅读 · 0 评论 -
数据结构与算法(Java描述)-7、链式堆栈及其栈的应用
一、链式堆栈链式存储结构的堆栈称作链式堆栈。与单链表相同,链式堆栈也是由一个个结点组成的,每个结点由两个域组成,一个是存放数据元素的数据元素域element,另一个是存放指向下一个结点的对象引用(即指针)域next。堆栈有两端,插入数据元素和删除数据元素的一端为栈顶,另一端为栈底。链式堆栈都设计成把靠近堆栈头head的一端定义为栈顶。依次向链式堆栈入原创 2017-10-21 11:09:14 · 343 阅读 · 0 评论 -
数据结构与算法(Java描述)-8、中缀表达式转换后缀表达式算法
一、表达式的三种形式中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 *前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:* + 2 1 3 二、表达式的转换将中缀表达式转换为后缀表原创 2017-10-22 22:18:39 · 355 阅读 · 0 评论 -
数据结构与算法(Java描述)-9、队列以及顺序循环队列的应用
一、队列基本概念队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作。队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头。队列的插入操作通常称作入队列,队列的删除操作通常称作出队列。下图是一个依次向队列中插入数据元原创 2017-10-22 22:31:07 · 416 阅读 · 0 评论 -
数据结构与算法(Java描述)-20、图、图的邻接矩阵、有向图的广度优先遍历与深度优先遍历
一、图的基本概念图:是由结点集合及结点间的关系集合组成的一种数据结构。结点和边:图中的顶点称作结点,图中的第i个结点记做vi。有向图: 在有向图中,结点对<x ,y>是有序的,结点对<x,y>称为从结点x到结点y的一条有向边,因此,<x,y>与<y,x>是两条不同的边。有向图中的结点对<x,y>用一对尖括号括起来,x是有向边的始点,y是有向边的终点,有向图中的边也称作弧。无向图 :在无向图中,结点...原创 2018-07-14 15:22:58 · 4651 阅读 · 0 评论
分享