![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
浅汐王
这个作者很懒,什么都没留下…
展开
-
串的模式匹配算法(朴素、KMP、改进算法)Java
1.朴素的模式匹配算法 为主串和子串分别定义指针i,j。 (1)当 i 和 j 位置上的字母相同时,两个指针都指向下一个位置继续比较; (2)当 i 和 j 位置上的字母不同时,i 退回上次匹配首位的下一位,j 则返回子串的首位。(注:该图从下标为1开始 )实现程序:/** * 朴素的模式匹配算法 * 说明:下标从0开始,与书稍有不同,但原理一样 ...原创 2020-01-04 14:02:03 · 24492 阅读 · 0 评论 -
循环队列和链队列(Java)
队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表。1.循环队列 队列的顺序储存结构:用数组存储队列,引入front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示。 当执行入队操作时,若数组尾部已满,而数组前部因有元素出队而有空位时,我们把新插入的元素从头开始入队,这样就类似于头尾相接的结构。 ...原创 2020-01-04 13:59:02 · 24286 阅读 · 0 评论 -
栈的顺序与链式存储(Java)
栈:限定仅在表尾进行插入和删除操作的线性表。栈的插入(进栈)和删除(出栈)操作如下图所示。 1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针)。一个长度为5的栈的示意图如下:实现程序:/** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * */public class S...原创 2020-01-04 13:55:49 · 24117 阅读 · 0 评论 -
线性表之双向链表(Java)
在每个数据结点中都有两个指针,分别指向直接后继和直接前驱,这样的链表称为双向链表。双向链表的结构如图所示:查找元素可以根据元素的位置,分别沿正向和反向查找。双向链表实现程序:public class DuLinkList<E> { private Node<E> head; private int count; /**...原创 2020-01-04 13:51:35 · 23877 阅读 · 0 评论 -
线性表之循环链表(Java)
将单链表终端结点的指针域由空指针改为指向头结点,形成一个环,这种头尾相接的单链表称为循环列表。循环列表的结构如下图所示:循环链表的优点:可以从任意一个结点出发,遍历所有结点。将两个具有尾指针的循环链表合并成一个表非常方便,如下图所示:合并后:Java程序代码:Node p=rearA.next;rearA.next=rearB.next.next;Node...原创 2020-01-04 13:46:59 · 12133 阅读 · 0 评论 -
线性表之静态链表(Java)
用数组描述的链表,称为静态链表。数组元素由两个数据域data和cur组成:data存放数据元素;cur相当于单链表中的next指针,称为游标。某一静态链表结构如图所示(游标存放内容可参考程序中的说明1):静态链表的优缺点:静态链表实现程序:/** * 说明: * 1.数组第一个元素的cur为备用链表第一个结点下标, * 数组最后一个元素的cur为第一个有数据...原创 2020-01-04 13:45:51 · 4580 阅读 · 0 评论 -
线性表之单链表 (Java)
每个结点中只包含一个指针域的链表,称为单链表。单链表的结构如图所示:单链表与顺序存储结构的对比:实现程序:/** * 说明: * 1.《大话数据结构》中没有线性表的长度,但提到可以存储于头节点的数据域中。 * 本程序的线性表长度存放于count变量中,线性表长度可以使程序比较方便。 * 2.程序中,第i个位置代表第i个结点,头结点属于第0个结点 * 3.因为...原创 2020-01-04 13:43:16 · 202 阅读 · 0 评论 -
线性表之顺序存储结构(Java)
顺序存储结构指的是用一段地址连续的存储单元一次存储线性表的数据元素,一般用一维数组来实现。书中的线性表抽象数据类型定义如下(第45页):实现程序:package SqList; /** * * 几个注意点: * 1.初始化时,应考虑数组大小为负的情况 * 2.在各操作中,当涉及到位置i时,都应考虑i位置不合理的情况 * 3.插入操作中,需考虑线性表已满的情况 ...原创 2020-01-04 13:39:38 · 163 阅读 · 0 评论 -
二叉排序树
前言数据结构中,线性表分为无序线性表和有序线性表。无序线性表的数据是杂乱无序的,所以在插入和删除时,没有什么必须遵守的规则,可以插入在数据尾部或者删除在数据尾部。但是在查找的时候,需要遍历整个数据表,导致无序线性表的查找效率低。有序线性表的数据则相反,查找数据时的时候因为数据是有序的,可以用二分法、插值法、斐波那契查找法来实现。但是,当进行插入和删除操作时,需要维护表中数据的有序性,会耗费大量...原创 2020-01-03 23:15:03 · 270 阅读 · 0 评论 -
霍夫曼树
前言霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化。重要概念路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。图2.1图2.1所示二叉树结点A到结点D的路径长度为2,结点A到达结点C的路径长度为1。...原创 2020-01-03 23:08:22 · 1834 阅读 · 0 评论 -
线索二叉树
线索二叉树产生背景现有一棵结点数目为n的二叉树,采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域,而结点为n的二叉树一共有n-1条有效分支路径。那么,则二叉链表中存在2n-(n-1)=n+1个空指针域。那么,这些空指针造成了空间浪费。例如:图2.1所示一棵二叉树一共有10个结点,空指针^有11个。图2.1此外,当对二叉树进行中序遍历时可以得到二叉树的中序序...原创 2020-01-03 23:00:35 · 187 阅读 · 0 评论 -
二叉树基础
1 重点概念1.1 结点概念结点是数据结构中的基础,是构成复杂数据结构的基本组成单位。1.2 树结点声明本文中提及的结点专指树的结点。例如:结点A在图中表示为:2 树2.1 定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:1)有且仅有一个特定的称为根(Root)的结点;2)当n>1时,其余结点可分为m(m>...原创 2019-12-07 00:17:29 · 115 阅读 · 0 评论 -
递归算法
A方法调用B方法,我们很容易理解!递归就是:A方法调用A方法!就是自己调用自己,因此我们在设计递归算法时,一定要指明什么时候自己不调用自己。否则,就是个死循环!递归算法要点递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。利用递归可以用简单的程序来解决一些复杂的问题。比如:大多数排序使用的就是递归算...原创 2019-12-06 20:53:52 · 168 阅读 · 0 评论