数据结构基础
数据结构基础
码儿快跑~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KMP算法分析
在学习KMP算法之前, 我们事先了解了一个实例也就是暴力字符串匹配发现了它的效率十分的底下然后我们才了解了KMPpackage suanfa10;import java.util.Arrays;public class KMPtest { public static void main(String[] args) { String str1 = "bb bsjdfbb lo isj"; String str2 = "bsjdfbb";原创 2021-12-04 21:22:40 · 696 阅读 · 0 评论 -
动态规划分析
package suanfa10;public class Beibao { public static void main(String[] args) { //假设有三个商品, 设置两个数组分别存放它们的重量和价格, 前面加0是为了方便商品的编号和下标对应 int[] w = {0, 4, 3, 1}; //一号商品的重量4磅 int[] v = {0, 3000, 2000, 1500}; //一号商品的价格是3000元 ...原创 2021-12-04 12:53:14 · 119 阅读 · 0 评论 -
分治算法分析
package suanfa10;public class Hannuota { private static int count= 0; public static void main(String[] args) { char a = 'A'; char b = 'B'; char c = 'C'; int num = 4; hannuotawenti(num , a , b , c); ..原创 2021-12-03 09:31:07 · 101 阅读 · 0 评论 -
二分查找的非递归实现
public class erfen { public static void main(String[] args) { int[] arr = {1,5,25,66,88,99,444}; int i = erFen(arr, 99); if (i == -1){ System.out.println("数组中没有该数"); }else{ System.out.println("该数原创 2021-12-02 16:31:16 · 310 阅读 · 0 评论 -
图 的分析
创建一个如图所示的图import java.util.ArrayList;import java.util.Arrays;public class TuTest { private int[][] tu; private ArrayList<String> nodelist; private int bians; public static void main(String[] args) { int n = 5; ...原创 2021-12-02 15:58:23 · 448 阅读 · 0 评论 -
多叉树(B树)分析
B+树其实就是对链表分段的设计思想, 使得查找变得高效原创 2021-11-29 16:19:10 · 156 阅读 · 0 评论 -
平衡二叉树AVL分析
这样一来, 我们在二叉排序树的基础上, 再来实现平衡二叉树以下是单旋转的情况分析public class AVLtest { public static void main(String[] args) { //int[] arr = {4,3,6,5,7,8}; int[] arr = {10,12,8,9,7,6}; //创建一个Avl数对象 AvlTree avlTree = new AvlTree(); .原创 2021-11-28 18:51:08 · 220 阅读 · 0 评论 -
二叉排序树BST分析
先看一个需求:给定一个数列, 要求能够对其高效的完成数据的查询和添加对于数据的查询和添加, 我们之前使用的是数组或者链表但是这两种数据结构是各自有缺陷的那有没有一种数据结构能够实现查询和添加数据都十分的高效就是二叉排序树BST (要求: 对于树中的每一个非叶子结点, 左节点要小于当前节点, 而右节点要大于当前节点)添加操作(将数列构建成二叉排序树)删除操作 (分删除的是叶子节点, 是只有一个子树的节点, 是有两个子树的节点)...原创 2021-11-26 21:50:38 · 335 阅读 · 0 评论 -
赫夫曼树分析
什么是赫夫曼树就是wpl: 就是树的带权路径长度最小什么是路劲长度什么是结点的权, 结点的带权路径长度int[] arr = {13,7,8,3,29,6,1};将这个arr变成一个赫夫曼树就应该是这样的import java.util.ArrayList;import java.util.Collections;import java.util.List;public class HefumanshuTest { public static void main(Stri原创 2021-11-20 20:56:49 · 540 阅读 · 0 评论 -
堆排序分析
大顶堆和小顶堆结合顺序存储二叉树的概念大顶堆映射到数组就是arr[i] >= arr[2i+1] && arr[2i+2]小顶堆就是arr[i] <= arr[2i+1] && arr[2i+2]一般升序就是用的大顶堆降序就用小顶堆import java.util.Arrays;public class DuipaixuTest { public static void main(String[] args) { int.原创 2021-11-19 19:44:58 · 330 阅读 · 0 评论 -
树的三种遍历三种查找, 还有顺序存储, 中序线索化以及线索化之后如何遍历
树: 能提高数据的存储, 读取的效率例如二叉排序树既可以保证数据的检索速度, 还能保证数据的插入, 删除, 修改的速度遍历二叉树的三种方式看父节点的输出顺序有前序, 中序, 和后序前序: 先输出父节点, 再遍历左子树和右子树中序: 先遍历右子树, 在输出父节点, 最后遍历右子树后序: 先遍历左子树, 再遍历右子树, 最后输出父节点示例手动创建一个这样的二叉树, 并遍历public class ErChaShuTest { public static void main(S.原创 2021-11-18 16:28:15 · 715 阅读 · 0 评论 -
哈希表总纲
哈希表的介绍和内存布局原创 2021-11-12 20:08:31 · 405 阅读 · 0 评论 -
查找方法总纲
二分查找要求, 必须是先排序好的优化, 如果一个数列中有好几个相同的数, 又应该怎么使用二分查找出来呢?public class Erfen { public static void main(String[] args) { int[] arr1 = {4,551,551,551,551,551,551,555}; int byErfen1 = findByErfen1(arr1, 0, arr1.length - 1, 551); if (b原创 2021-11-11 19:21:04 · 425 阅读 · 0 评论 -
排序方法总纲
排序方法内部排序: 数据全部加载进内存,外部排序: 数据量过大, 无法全部加载进内存, 需要借助外存来进行排序内部排序插入排序: 直接插入排序, 希尔排序选择排序: 简单选择排序, 堆排序交换排序: 冒泡排序, 快速排序归并排序:基数排序:算法的时间复杂度基本介绍时间频度: 一个算法花费的时间与算法中语句执行的次数成正比, 那个算法中语句执行次数越多, 它花费的时间也就越多, 一个语句执行的次数称之为语句频度或者时间频度, 记为T(n).忽略常数项(也就是看循环)忽略低次项忽略系原创 2021-11-10 21:30:39 · 557 阅读 · 0 评论 -
栈-3-递归能解决的问题总纲
递归调用从jvm(虚拟机)入手, 方法栈的存在使得最后调用的方法, 最先执行.递归能解决什么样的问题1)求结果的数学问题如: 8个皇后问题\ 汉诺塔问题\ 阶乘问题\ 迷宫问题\ 球和篮子问题2)查找或者排序的算法问题如: 快排\ 归并排序\ 二分查找\ 分治算法3)将用栈解决的问题->递归代码比较简洁递归的底层1)执行一个方法时, 就创建一个新的受保护的独立空间(栈)2)方法的局部变量是不会相互影响的但是, 方法中使用的是引用类型的变量(如:数组)就会共享(这其实和变量在jv.原创 2021-11-03 21:30:02 · 486 阅读 · 0 评论 -
栈-2-栈的使用--逆波兰表达式问题解决
一.没有括号1.通过一个索引来遍历表达式2.如果发现是一个数字先拼接进一个临时变量保存,然后当前字符判断是表达式最后一个字符直接将拼接的临时变量存进数字栈否则, 要判断下一个是否是符号, 如果是符号, 就可以将拼接的临时变量放进数字栈, 并重置临时变量.3.如果发现是一个符号判断符号栈是否为空为空, 直接进符号栈不为空, 要判断当前的符号和符号栈栈顶符号的优先级如果当前符号的优先级小于或等于栈顶, 就从数字栈中取两个数, 符号栈中取一个符号, 进行运算, 将运算结果入数字栈, 再将当前原创 2021-10-31 18:38:35 · 205 阅读 · 0 评论 -
单向环形链表-解决Josephu问题
Josephu, 约瑟夫, 约瑟夫环问题设编号为1~n的n个人围坐到一圈, 约定编号为k(1<=k<=n)的人开始从1开始报数, 数到m的那个人出列, 它的下一位又开始从1开始数, 一次类推, 直到所有人都出列, 得到一个出列的序列.分析利用一个不带头结点的环形链表创建一个不带头结点的环形链表1.先创建一个节点, 并让frist指针指向该节点, 并形成环形2.后面每新建一个新的节点, 就把该节点加入到已有的环形链表中去.遍历环形链表1.先让一个辅助指针cur指向第一个节点fris原创 2021-10-31 12:35:45 · 154 阅读 · 0 评论 -
一维数组实现环形队列
环形队列:初始化头指针front=0初始化尾指针rear=0要求是add数据时我就尾指针rear后移一位并指向新add进来的数据, get数据时我就头指针front后移一位, 保持在第一个数据的前一位.并且能够利用front和rear判断出队列现在是不是空或者满, 还有判断出队列中现在有几个数据.首先,判断是否为空,由于初始状态就是空,不难看出,只要当头(f )指针追上了尾指针(r )就是为空。也即是rear = front可是, 怎么判断是否为满呢?当尾指针r 差一步就追上头指针f 时, 就原创 2021-10-30 18:51:34 · 360 阅读 · 0 评论 -
java双向链表
传统的链表沿着链表的反向遍历是困难的,以及操作某个节点的前一个元素,也是十分的困难。双向链表提供了这些能力,即可以向前遍历,也可以向后遍历。其中实现在于每个链节点有两个指向其它节点的引用。一个指向前驱节点,一个像传统链表一样指向后继节点。...原创 2021-10-30 18:10:53 · 182 阅读 · 0 评论 -
java单链表
Java实现单链表单链表初始化:编写一个Node类来充当结点的模型。我们知道,其中有两个属性,1数据域,2指针域。public class Node { //1.数据域 public int data; //2.指针域 public Node next; //构造方法 public Node(int data){ this.data = data; }}由于Java语言中没有指针,因此可以将每个结点包装成类,利用其中一个成员原创 2021-10-30 16:13:54 · 158 阅读 · 0 评论 -
栈-1-Stack对象的创建以及它常用的五个方法
Java Stack创建一个栈对象Stack类只有一个默认的构造方法Stack<泛型> 对象名 = new Stack<泛型>();Stack的方法boolean empty() 测试堆栈是否为空。Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。Object push(Object element) 把项压入堆栈顶部。int search(Object element原创 2021-10-30 15:38:50 · 629 阅读 · 0 评论
分享