
数据结构与算法(JAVA篇)
靠谱的混蛋
逆袭的码农
展开
-
(一)线性结构之ArrayList的实现
线性结构定义如果一个数据元素序列满足:(1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素;(2)第一个数据元素没有前驱数据元素;(3)最后一个数据元素没有后继数据元素。 则称这样的数据结构为线性结构。线性表抽象数据类型线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合。原创 2013-10-04 16:35:11 · 1537 阅读 · 0 评论 -
(十五)稀疏矩阵和三元组稀疏矩阵压缩算法
稀疏矩阵对一个m×n的矩阵,设s为矩阵元素个数的总和,有s=m*n,设t为矩阵中非零元素个数的总和,满足t<<s的矩阵称作稀疏矩阵。符号“<<”读作小于小于。简单说,稀疏矩阵就是非零元素个数远远小于元素个数的矩阵。相对于稀疏矩阵来说,一个不稀疏的矩阵也称作稠密矩阵。 稀疏矩阵的压缩存储稀疏矩阵的压缩存储方法,是只存储矩阵中的非零元素。稀疏矩阵中每个非零元素及其对应的行下原创 2014-01-19 19:16:12 · 5695 阅读 · 0 评论 -
(十二)对象数组以及Vector类实现
数组的定义数组是n(n≥1)个相同数据类型的数据元素a0,a1,a2,...,an-1构成的占用一块地址连续的内存单元的有限集合。数组的实现数组通常以字节为内部计数单位。对一个有n个数据元素的一维数组,设a0是下标为0的数组元素,Loc(a0)是a0的内存单元地址,k是每个数据元素所需的字节个数,则数组中任一数据元素ai的内存单元地址Loc(ai)可由下面公式求出:原创 2014-01-19 16:32:27 · 1767 阅读 · 0 评论 -
(十四)矩阵类与对称矩阵的压缩算法
矩阵类矩阵是工程设计中经常使用的数学工具。 矩阵的运算主要有矩阵加、矩阵减、矩阵乘、矩阵转置、矩阵求逆等。矩阵用两维数组处理最为方便。 二维数组存储结构。 设计矩阵类import java.util.Random;public class MyMatrix { int[][] matrix ;//矩阵数组 Random random =ne原创 2014-01-19 17:20:35 · 2253 阅读 · 0 评论 -
(十)串的基本概念与串存储结构
串的基本概念串(也称作字符串)是由n(n≥0)个字符组成的有限序列。一个串中任意个连续的字符组成的子序列称为该串的子串。 包含子串的串称为该子串的主串。一个字符在一个串中的位置序号(为大于等于0的正整数)称为该字符在串中的位置。当且仅当这两个串的值完全相等时,称这两个串相等。串抽象数据类型数据集合:串的数据集合可以表示为字符序列s0, s1,… , sn-1,每原创 2014-01-19 16:15:47 · 1203 阅读 · 0 评论 -
(九)链式队列以及优先级队列应用
链式队列链式存储结构的队列称作链式队列。链式队列的存储结构如下图所示链式队列的实现//结点类public class Node { Object element; //数据域 Node next; //指针域 //头结点的构造方法 public Node(Node nextval) { this.next = nextval; }原创 2014-01-19 16:07:59 · 1000 阅读 · 0 评论 -
(七)中缀表达式转换后缀表达式算法
表达式的三种形式中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:21 + 3 *前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:*+ 2 1 3 表达式的转换将中缀表达式转换为后缀表达式:(原创 2014-01-19 15:34:30 · 2467 阅读 · 0 评论 -
(十三)Set类实现以及彩票机选算法实现
Set类实现//用户自定义的MySet类public class MySet { private MyVector value = new MyVector(); //添加对象 public void add(Object obj)throws Exception { //不允许添加空对象 if(obj==null) { return ; } //由于原创 2014-01-19 17:11:26 · 1576 阅读 · 0 评论 -
(八)队列以及顺序循环队列的应用
队列基本概念队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作。队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头。队列的插入操作通常称作入队列,队列的删除操作通常称作出队列。下图是一个依次向队列中插入数据元素a0,a1,...,a原创 2014-01-19 15:50:49 · 2624 阅读 · 0 评论 -
(十一)StringBuffer的实现
StringBufferMyStringBuffer与MyString的不同之处是:对于MyString类的连接,插入和删除子串成员函数都是不改变原对象的串值。但对于MyStringBuffer类,连接,插入和删除子串的成员函数都改变了原对象的串值。MyStringBuffer类实现//用户自定义的MyStringBuffer类public class MyStringBuffe原创 2014-01-19 16:19:02 · 1236 阅读 · 0 评论 -
(六)Brute-Force算法与KMP算法
串的模式匹配操作在字符串匹配问题中,我们期待察看S串中是否含有串T(模式串)。其中串S被称为主串,串T被称为子串。如果在主串中查找到子串,则称为模式匹配成功,返回模式串的第一个字符在主串中出现的位置。如果在主串中未找到子串,则称为模式匹配失败,返回-1。Brute-Force与KMP算法是两种最经典的模式匹配算法。Brute-Force算法也称简单匹配算法,其基本思路是:从目标串s=”s0s1…s原创 2014-01-12 21:04:37 · 6585 阅读 · 0 评论 -
(五)链式堆栈的实现与应用
链式堆栈链式存储结构的堆栈称作链式堆栈。与单链表相同,链式堆栈也是由一个个结点组成的,每个结点由两个域组成,一个是存放数据元素的数据元素域element,另一个是存放指向下一个结点的对象引用(即指针)域next。堆栈有两端,插入数据元素和删除数据元素的一端为栈顶,另一端为栈底。链式堆栈都设计成把靠近堆栈头head的一端定义为栈顶。依次向链式堆栈入栈数据元素a0, a1, a原创 2013-10-05 17:56:46 · 1162 阅读 · 0 评论 -
(四)基于数组的栈的实现
堆栈的基本概念堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作。堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈。从输入和输出数据元素的位置关系看,堆栈的原创 2013-10-05 16:37:36 · 1059 阅读 · 0 评论 -
(三)循环链表以及循环链表应用
单向循环链表单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环。和单链表相比,循环单链表的长处是从链尾到链头比较方便。当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表。与单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作时,算法实现较为方原创 2013-10-04 23:05:37 · 3975 阅读 · 0 评论 -
(二)线性结构之LinkedList的实现
链表结构链式存储结构是基于指针实现的。我们把一个数据元素和一个指针称为结点。链式存储结构是用指针把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来。链式存储结构的线性表称为链表。 链表类型根据链表的构造方式的不同可以分为:1.单向链表2.单向循环链表3.双向循环链表单链表结构单链表是构成链表的每个结点只有一个指向直接后继结点的指针。原创 2013-10-04 18:38:12 · 1682 阅读 · 0 评论 -
(十六)递归算法与递归算法应用
递归的概念 若一个算法直接地或间接地调用自己本身,则称这个算法是递归算法。问题的定义是递归的 例如:阶乘函数的定义 1 当n=1时 n! = n*(n-1)! 当n>1时递归算法的设计方法适宜于用递归算法求解的问题的充分必要条件是: (1)问题具原创 2014-01-20 10:27:42 · 1888 阅读 · 0 评论