数据结构
数据结构
small_py_trade
这个作者很懒,什么都没留下…
展开
-
KMP算法
(一)素朴匹配算法一个模式串(String)在另一个主串中的位置,称为字符串匹配。分别给两个串指定一个指针,模式串的指向0位置,主串的指针则依次向后,若找到了根模式串位置0一样的字符,则模式串和主串依次后移比较,若都相同则匹配,否则模式串指针指向0,主串继续向后。用这种方法如果比较"abcdefg"和"abcdx"时,子串会与主串的第0-2位比较,但是跟1,2比较其实是没必要的。(二)KMP用KMP比较"abcdefg"和"abcdx"比较时,当第一次对比后,子串会直跳过第一次比较过的a原创 2022-03-09 21:44:16 · 71 阅读 · 0 评论 -
动态规划算法
一个比较经典的动态规划算法:如图找到从左上角到右下角的路径中数字和最小的路径。实现:public static int bestPath(int[][] array) { //先判断array是否为空 if (array==null) { return 0; } /* * 令出一个和array大小相同的二维数组用来保存走到各个点的最小累加值 * 最后返回最右下角的值即为最小累加值 * 先算出第一行各个点的累加值便于后面计算 */ int[][] total=n原创 2022-03-09 21:03:23 · 77 阅读 · 0 评论 -
分治算法
将一个大问题划分为N个小问题,各问题的答案相互独立,知道所有小问题的答案就知道大问题的答案。举例如汉诺塔问题,每次只能移动一个盘,要把A上的按从大到小往上排列的盘移动到C上,顺序不变:实现:public static void hannuoTower(int num,char a,char b,char c) { if (num==1) { System.out.println("第"+num+"个盘:"+a+"-->"+c); }else { hannuoTower(n原创 2022-03-09 20:06:22 · 69 阅读 · 0 评论 -
图
(一)概念当需要接触多对多的概念时,会使用图。图有各种形状和大小,各条边有权重。如下是一个图:图的边可以有方向,可以是单向和双向的如果每个顶点代表一个任务,那么可以运用深度搜索算法来确定任务的最优执行顺序。(二)图的表示形式二维数组或链表都可以表示。用邻接列表表示,可以每个顶点和其边存入一个一维数组,再将所有顶点的合成二维数组。但是这样如果A顶点到B顶点是单向的,查找它们之间的边比较费时。邻接矩阵就是行和列都是顶点,用对应行列的值来表示连接关系,如果两个点有连接,对应值就是权..原创 2022-03-08 20:36:24 · 218 阅读 · 0 评论 -
二叉排序树
查询的效率高于链表。排序规则举例:如1,2,3,5,7,如果有相同的数可以放在左子节点或右字节点上。二叉排序树如果使用中序遍历肯定是关键码值由小到大递增的。在删除某结点的时候,可以让左子节点替代自己。实现方法,包括查找、删除、添加public class SortNode { private int value; private SortNode left; private SortNode right; public SortNode(int value) { t..原创 2022-03-07 21:33:31 · 423 阅读 · 0 评论 -
赫夫曼树
(一)树中一些概念路径:从某一结点到其根结点的通路,其中的分支数目称为路径长度权:可以给结点赋值称为它的权,带权路径长度就是权乘以路径长度树的带权路径长度:所有叶子结点的带权路径长度之和(wpl)。wpl最小的树最优,就是赫夫曼树,这样权越大的结点离根越近。(二)赫夫曼树排列所有结点的权重按从小到大放在一个序列中,最小两位相加,结果再放入序列,依次循环。最后根据它们每两个相加的关系组装二叉树。...原创 2022-03-06 21:15:17 · 134 阅读 · 0 评论 -
线索化二叉树
(1)概念:普通的二叉树遍历的时候左右指针并没有很好地利用,要完全利用每个结点的左右指针,就必须用到线索化二叉树。在遍历过程中使二叉树变成线索化二叉树的过程称为二叉树的线索化。在n个结点的二叉树中,有n+1个空链域,利用这些空链域存储某次遍历中结点的前续和后继结点。因为在特定的遍历方式下结点的遍历顺序是一定的。(2)结点:...原创 2022-03-06 19:48:48 · 438 阅读 · 0 评论 -
顺序存储二叉树
顺序存储二叉树就是用连续的数据单元,如数组来存储二叉树中的元素,一般按照自上而下、从左往右的顺序存储。这种情况只考虑完整的二叉树,如下所示:如果当前结点编号为n,则左边的结点编号为2*n+1,右边是2*n+2。实现:public class ArrayTree { private Node[] array; public ArrayTree(Node[] array ) { this.array=array; } public void preList(int index) .原创 2022-03-05 21:18:12 · 219 阅读 · 0 评论 -
树结构
(一)二叉树结构示例:二叉树中的元素11、21、31等可以存放在数组或链表里面。(二)实现一个树:二叉树的遍历方法:前序遍历、中序遍历、后序遍历原创 2022-03-05 20:33:26 · 218 阅读 · 0 评论 -
哈希表
哈希表把数组按键值存放,如下不同位置存放了一个链表原创 2022-02-21 21:47:59 · 83 阅读 · 0 评论 -
双向链表
单向链表只能一个方向遍历,双向链表可以前后向。双向链表可以自我删除,而单向链表必须找到前一个节点才能删除自己。原创 2021-12-30 21:03:02 · 181 阅读 · 0 评论 -
单向链表
虽然链表有序,但是它是以节点形式存储的,位置不连续。每个节点存data和下一个节点的地址链表分为有头节点的和没头节点的。示例代码:节点设置:package single_link;public class Node { private int num; private String name; private String nickname; private Node next; public Node(int num,String nickname,String name)原创 2021-12-30 20:31:44 · 434 阅读 · 0 评论