数据结构与算法
java 、C++ 数据结构与算法实战
半笺寄怀
不要光想,要行动
展开
-
【任意多边形求布尔差运算】:直线、弧线都可以
请注意,这只是一个简单的示例代码,仅处理了直线段和弧线段的情况,并没有考虑更复杂的情况,例如多个交叉区域、重叠区域等。此外,代码中的弧线段处理部分仅是一个简单的示例,实际情况下需要根据具体需求进行适当的调整和优化。这只是一个简单的示例代码,用于展示处理带有弧线的多边形布尔交集的思路。分割的数量越多,近似的精度就越高。执行布尔运算:现在,可以使用标准的多边形布尔运算算法,如求交集、并集或差集,对构建的多边形进行操作。以下是一个更完整的示例代码,用于计算两个任意多边形的布尔交集,包括直线段和弧线段的处理。原创 2023-06-01 16:04:37 · 398 阅读 · 0 评论 -
单向链表的反转
package com.yang.list;/**单向链表的反转,*/public class reverseLinkLIst {//内部类定义结点public static class Node{ public Object item; //保存数据 public Node next; //保存下一个结点的位置 public Node(Object item, Node next) { this.item = it原创 2021-08-17 09:15:06 · 76 阅读 · 0 评论 -
Fibonacci数列
描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39示例1输入:4复制返回值:3import java.util.Scanner;public class Solution { public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt();原创 2021-08-21 16:05:41 · 52 阅读 · 0 评论 -
基础排序:插入排序
```javapackage com.yang.sort;import static com.yang.sort.SelectSort.printArrays;import static com.yang.sort.SelectSort.swap;/** * 插入排序:从第二个元素开始,与前面的元素比较,如果小于前面的元素(前面的元素已经是有序的),就交换两个元素。 * 然后依此往后推,第三个元素、第四个元素。。。。相当于将一个元素,插入一个有序的数组。 * 时间复杂度.原创 2021-09-10 15:49:00 · 67 阅读 · 0 评论 -
基础的冒泡排序
【说明】:1.代码中的数组的打印方法是我本地idea同一个包下一个类中的静态方法,读者需要自己写,直接复制代码是会报错的。2.需要注意的是在外层循环遍历数组的时候采用倒叙遍历更好这样与内层遍历时的变量关系更加明确。当然正序遍历也是没有问题的。package com.yang.sort;import static com.yang.sort.SelectSort.printArrays;import static com.yang.sort.SelectSort.swap;/** * 冒泡排序原创 2021-09-10 15:21:45 · 70 阅读 · 0 评论 -
二分查找(可重复数据)-Java
【说明】:重点在于找到中间的那个值后,如果有重复的元素,需要以这个元素的位置分别向左边和右边遍历。将所有的值存在一个List集合中,然后返回,输出即可。没有找到就是-1.package com.yang.search;import java.util.ArrayList;import java.util.List;/** * 二分查找:需要注意的是二分查找的前提是,有序的数组。 */public class BinarySearch { public static void m原创 2021-08-17 22:09:45 · 271 阅读 · 0 评论 -
约瑟夫问题-java
package com.yang.list;/** * 约瑟夫问题:关键在于 如何创建一个单向环形链表和遍历环形链表 */public class RingLinkList { public static void main(String[] args) { Node first=getRingLinklist(41); showRingLinkList(first); System.out.println(); Syste原创 2021-08-17 20:00:06 · 66 阅读 · 0 评论 -
java哈夫曼编码详解
【说明】:核心思想在于哈夫曼树的构建、哈夫曼编码的输出、结点的定义(我个人将测试单独放在一个类中,这样主方法更加的轻捷,建议这样使用)。同时将将类放在一个包中。如下:1.TreeNode.java(树的结点定义)package com.yang.huffman;/** * 哈夫曼树结点定义 */public class TreeNode { // 数据域 private String data; // 权重 private int weight; //原创 2021-09-24 17:33:07 · 1408 阅读 · 0 评论 -
一文搞懂什么是线性表
一文搞懂线性表原创 2022-10-12 19:17:27 · 328 阅读 · 0 评论 -
选择排序代码详解
package com.yang.sort;/** * 选择排序:先给第一元素标记为最小值位置,然后与其后面的元素依次比较,如果小于标记的元素, * 就将标记改为当前元素的位置,然后交换两个元素的位置(此时数组中最小值到了数组的首位置) * ,然后再将后面的数组看作一个新的数组,重复前面的操作即可。 * 时间复杂度:O(n^2),不稳定 */public class SelectSort { public static void main(Strin原创 2021-09-10 15:58:51 · 132 阅读 · 0 评论 -
Java汉诺塔游戏详解
package com.org;import java.util.Scanner;/** * 汉诺塔算法 */public class HanoiTest { // 记录第几次移动 static int sum=0; public static void main(String[] args) {// A,B,C,三根柱子。 String a="A"; String b="B"; Stri原创 2021-09-14 17:24:31 · 133 阅读 · 0 评论 -
一文搞懂:C++ 指针常量 常量指针
C++ 再也不再搞不清 指针常量、常量指针原创 2023-01-12 20:13:39 · 222 阅读 · 2 评论 -
归并排序代码详解
package com.yang.sort;import static com.yang.sort.SelectSort.printArrays;/** * 归并排序:核心在于如何实现,将左边有序和右边有序的两个部分归并为一个, * 将数组分为多个有序的子序列,然后在组合在一个新的数组空间里面(i,j,k). 重点(*****) * 时间复杂度:O(nLogN) */public class MergeSort { public static void mai原创 2021-09-10 16:17:45 · 139 阅读 · 0 评论 -
Java二叉树的遍历详解(递归)
```javapackage com.yang.traverse;/** * 二叉树的递归遍历(先序、中序、后序) */public class BinaryTree { // 内部类,定义树的结点 public static class TreeNode{ // 数据域 String data; // 左孩子树 TreeNode left; // 右孩子树 TreeNode rig.原创 2021-09-22 17:22:44 · 242 阅读 · 1 评论 -
Java分治法求解最大最小
package com.yang.divide;/** * 分治法得到数组的最大最小值,核心思想在于将数组先划分为两个数组,然后比较两个数组的最大和最小(大的为最大值,小的为最小值) * 然后分治下去,直到数组中的元素为两个时,大的为最大值,小的为最小值。也可以划分到只有一个元素(最大最小都是自己)。 */public class GetMinMaxByDivide { // 内部类,方便得到最大值和最小值 public class MaxMain{ privat原创 2021-09-15 11:07:05 · 518 阅读 · 0 评论 -
数据结构01-基本概念了解
数据结构原创 2023-03-06 20:30:30 · 50 阅读 · 0 评论