![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 55
生产队的驴儿
一个人必须不停地写作,才能不被茫茫人海湮灭。
展开
-
手动实现 数组和链表
不用java标准库自己实现 一个 arraylist 和 linked list。原创 2023-03-08 10:22:17 · 346 阅读 · 0 评论 -
Iterator 迭代器
为了兼顾 各个子类的特性实现无差别可以 访问数据举个例子遍历数组和遍历链表两者代码的写法不一样为了实现使用相同的代码对不同的数据容器进行遍历就出现了 迭代器for语句的执行和 interator的实现息息相关。原创 2023-03-08 09:11:17 · 278 阅读 · 0 评论 -
java数据结构PriorityQueue
PriorityQueue 是具有优先级别的队列,优先级队列的元素按照它们的自然顺序排序,或者由队列构造时提供的 Comparator 进行排序,这取决于使用的是哪个构造函数。原创 2023-02-23 02:32:05 · 603 阅读 · 0 评论 -
关于如何计算 递归 方法 的时间复杂度 笔记总结
第一个 T(n) = T(n /2 ) + O(1)每次 n 缩小 一半,所以 一共会执行 log2 n 次每次的时间复杂度 为 O(1)总的时间复杂度 为 log2n * O(1) = log2n所以 时间复杂度 为 O(logn)第二个每次 n 只减少 1 次,所以 一共执行 n次每次时间复杂度为 O(1)总的时间复杂度为 n * O(1) = O(n)第三个每次 2 的 n次方 个减少一半 表示为 2的n次方 ,n 是 log2 n。原创 2022-10-29 10:22:00 · 1967 阅读 · 0 评论 -
动态规划入门 java版本
找出最长递增子序列eg: [1,5,2,4,3]从1 出发,开始找 最长递增子序列1 5 没了从1 出发,第二个数选择2开始依次类推,扫描每个数,得到如下 递增树图然后呢,从2 开始,从5开始,依次计算 最长序列长度时间复杂度数组长度 为 n存在 2的n次方个组合 的 子序列每个子序列,需要遍历 n次设置字典,避免重复节点计算避免重复节点的计算,从而加速 计算的过程。使用 空间 换时间。递归树的剪枝从1开始出发,长度为1从1开始出发的 最长长度 = 1 + 从后面元素开始出发的其中一原创 2022-06-25 08:26:43 · 109 阅读 · 0 评论 -
排序: 快速排序 + 冒泡排序 + 插入排序 + 选择排序
冒泡排序快速排序快速排序 的视频 一定看视频,不要看代码,直接看代码 不容易理解马士兵什么的,没有这个讲的简单易懂,看这个https://www.bilibili.com/video/BV1at411T75o?spm_id_from=333.337.search-card.all.click&vd_source=8d8fef6cad2875d6b6b4c08c3a9ac66d.........原创 2022-06-22 06:37:57 · 136 阅读 · 0 评论 -
merge sort
merge sort原创 2022-06-09 04:43:49 · 72 阅读 · 0 评论 -
链表 List +java实现
单链表双链表循环链表插入: 将一个新元素插入链表的任意位置。删除: 将一个元素从链表中删除。查找: 查找一个特定的元素。更新: 更新一个特定节点上的元素。插入 删除都需要 双指针思想一个 插入节点的指针一个插入节点前面的指针...原创 2022-06-03 07:24:19 · 253 阅读 · 0 评论 -
归并排序 + java + 数据结构 + 小和逆序对问题
归并排序整体就是一个简单递归,左边排好序、右边排好序、让其整体有序代码package test3;public class Test { public static void main(String[] args) { int[] arr= {3,2,1,5,6,2}; mergeSort(arr); for (int i: arr){ System.out.printf("%d ", i); } } public static voi原创 2022-04-23 06:41:29 · 119 阅读 · 0 评论 -
随机样本产生器 + java
代码随机产生数组 public static int[] generateRandomArray(int maxSize, int maxValue) { // Math.random() --> [0,1) 所有小数,等概率返回1个 // Math.random() * N --> [0,N) 所有小数,等概率返回1个 // (int) (Math.random() * N) --> [0,N-1) 所有整数,等概率返回1个 int[] arr =原创 2022-04-22 07:31:55 · 181 阅读 · 0 评论 -
快速排序 +java + 数据结构
快速排序Quick Sort快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。示意图以11为基准比11小的放在左边比11大的放在右边以5为基准线比5小放在左边比5大放在右边以21为基准线比21小放在左边比21大放在右边思路分析设置两个索引值左边1个右边1个原创 2022-04-18 08:47:19 · 118 阅读 · 0 评论 -
插入排序 +java + 数据结构
插入排序将n个 待排序的元素 看做一个 有序表 和 无序表。开始时, 有序表 只包含1个元素无需表 包含 n-1个元素排序过程: 从 无序表中 抽出一个第1个元素 ,将其排序码 依次 和 有序元素的 排序码 进行比较,将其插入到有序表中的 适当位置让其成为新的有序表。图解第一个元素 17 默认就是自称一个有序表。 后面5个元素 作为一个无序表。第二个元素: 从无序表的第一个元素,开始,插入有序表中。3 和 17 比较,如果3比17小,就将 17 往后移动一位,将3 放在第一位。原创 2022-04-12 08:27:46 · 129 阅读 · 0 评论 -
BFS 广度优先搜索
BFS适用于 多条路可以走出迷宫,但是需要找到最短路径的方法。广搜 需要 队列。队列目的: 提供 缓冲区供当前 应该要执行的, 但是又 不能同时执行的操作 一个缓冲空间。队列记录内容当前步数当前点位置图解开始根据当前点的位置 判断下一步可能的位置并更新将更新后的,所产生的新的数据包,再次塞入队列特别适合用来求最短路径的方法广搜 和 深搜 区别光搜 是以 每一步 为单位, 向 外进行 拓展。深搜 是一直走下去。举例子...原创 2022-04-10 08:08:32 · 193 阅读 · 0 评论 -
选择排序 +java +数据结构
选择排序 select sorting首选 从 1 到n中选择最小值 ,和 第一个值交换其次 从 2 到n中选择最小值 ,和 第二个值交换图解思路原始: 101 34 119 1第一轮: 1 34 34 101第二轮: 1 34 101 119第三轮: 1 34 101 119四个数据,经过三轮排序就可以选择排序 一共有 数组大小 - 1 次排序每一轮排序 又是 一个循环, 循环的规则:假的当前这个数为最小数,然后和后面每个数依次比较,如果发现更小的就重新确定最小数,并的到小标。当原创 2022-04-09 03:15:52 · 904 阅读 · 0 评论 -
冒泡排序+java + 数据结构
排序算法Sort Algorithm常见排序分类### 常见排序:直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序排序算法定义将一组数据,按照指定的顺序进行排列的过程。分类内部排序将需要处理的所有数据 加载到 内部存储器(内存) 进行排序。外部排序数据量大,无法全部加载到内存中,需要借助外部存储等文件进行排序。算法时间复杂度衡量一个程序or算法执行的时间长度。时间频度一个算法 花费的时间 和 算法中语句的执行次数 成正比。语句执行次数 ; 语句频道,or,时原创 2022-04-08 14:43:57 · 464 阅读 · 0 评论 -
递归 八皇后问题 java版本
八皇后题目在 8x8的棋盘上, 放 8 个皇后任意两个皇后 不能共线,就是不能同行,同列,同斜线。高斯76中。八皇后问题,是一个古老而著名的问题,是回湖算法的典型案例。该问题是国际西洋棋棋手马克斯•贝瑟尔于1848年提出:在8X8格的田际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆汫思路分析第一皇后 第一行 第一列第二个皇后 依次 放第二行,第一列,第二列,第三列、、、、、、 依次次判断。。。。。。依次继续放皇后,知道得出正确原创 2022-04-08 10:17:10 · 744 阅读 · 0 评论 -
递归+java +数据结构
递归方法自己调用自己每次调用时候,传入的参数是不同的注意: 一定要有一个尽头。递归解决的问题汉诺塔,迷宫,8皇后问题快排,归并,二分查找,分治算法。递归的规则执行一次,创建一个新的 独立栈空间。遇到return就返回数据,谁调用就返回给谁。解决问题 迷宫给小球 一个不断 调用的方法,通过这个方法 判断周围环境 移动 到达出口。步骤首先判断 迷宫大小8行 7 列int[][] map = new int[8][7];区分墙 和 可行走的空间墙 1空间 0打印墙小球原创 2022-04-03 12:52:06 · 390 阅读 · 0 评论 -
队列 +java +数据结构
队列特殊线性表,只允许在 front 表的前端进行 删除操作, 在表的后端rear进行插入操作。就是所谓的 先进先出。分为 顺序队列 和 循环队列顺序队列一个连续空间两个指针管理: 一个头指针,一个尾指针。...原创 2022-04-03 08:02:01 · 222 阅读 · 0 评论 -
稀疏数组 数据结构 java
稀疏数组原始数据0 表示默认值,用于记录 无意义的数据。实现第一行记录: 主要记录 当前数组中,一共存在多少行,多少列,多少有效数据的值。package SparseArray;public class SparseArray { public static void main(String[] args) { // Simulation of chessboard through two-dimensional array int[][] array = new原创 2022-04-02 14:12:29 · 438 阅读 · 0 评论 -
单向环形列表约瑟夫环问题
单向环形链表示意图约瑟夫问题设编号为1,2…,n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。package LinkedList;public class CircleSingleLinkedList { /** * construct Circle Single linke原创 2022-03-26 14:07:15 · 634 阅读 · 0 评论 -
双链表 + java +数据结构
双链表每个node都有两个 指针, 分别是 向前 和 向后。双链表 从任意一个节点开始,都可以方便访问它 的 前驱节点 和 后继节点。对比单链表双链表示意图双链表 图书增删改查nodepackage LinkedList;public class BookNode { public int id; public String name; public double price; public BookNode next; //store the f原创 2022-03-25 08:36:00 · 140 阅读 · 0 评论 -
单链表 + java + 数据结构
链表链表当中每一个元素都称为一个节点。节点,可以在程序的运行过程中,动态生成。节点节点 两个 域: data 域 和1next域。data 存放value。next 存放下一个节点地址。链式存储结构示意图适合 插入元素,插入新元素的速度快。(相对于链式存储结构)不适合 查询,查询慢。(相对于顺序存储结构)上图是物理结构图下图是逻辑结构示意图练习一个 有 头的 单链表,实现 商品的增删改查,针对商品进行编码排序。...原创 2022-03-25 06:04:20 · 174 阅读 · 0 评论 -
java栈-栈实现回文数和字符串计算
栈先进来的最后出去,后进来的先出去。放元素: 压栈 push取元素: 出栈/弹栈。 pop操作是针对 栈顶。栈底不允许做。压栈 和 弹栈可以类比 为 手枪 上子弹,子弹发射。栈的实现任何表都可以 用来实现 栈。主要的两种方式: 链表 和 数组。链表实现栈动态栈: 使用 链表 实现 栈特点: 元素 和 元素 间 ,物理上不连续,但是功能受限。只能在 栈顶 进行 插入 和 删除, 栈尾 不允许 操作。数组实现栈静态栈: 使用 数组 实现 栈栈的应用场景子程序的调用处理原创 2022-03-14 05:30:20 · 741 阅读 · 0 评论 -
线性结构 和 非线性结构
数据结构 线性结构原创 2022-03-13 13:07:34 · 374 阅读 · 0 评论