数据结构与算法
数据结构与算法意味着一个程序员的基础水平,是编程思想的核心
学习使我快乐T
这个作者很懒,什么都没留下…
展开
-
(14.10 马踏棋盘算法基本介绍及其代码实现)
也被称为骑士周游算法翻译 2022-09-05 17:01:28 · 236 阅读 · 0 评论 -
(14.9 弗洛伊德算法的基本介绍及其代码实现应用)
Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。翻译 2022-09-05 16:51:59 · 200 阅读 · 0 评论 -
(14.8 迪杰斯特拉算法的基本介绍及其代码实现应用场景)
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直至扩展到终点为止。翻译 2022-09-05 16:41:26 · 1132 阅读 · 0 评论 -
(14.7 克鲁斯卡尔算法的应用场景介绍及其代码实现)
克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普利姆算法不同,它的时间复杂度为O(eloge) (e为网中的边数),所以,适合于求边稀疏的网的最小生成树翻译 2022-09-05 16:30:44 · 510 阅读 · 0 评论 -
(14.6 普利姆算法的介绍及其应用场景)
普利姆算法查找最小生成树的过程,采用了贪心算法的思想。对于包含N个顶点的连通网,普利姆算法每次从连通网中找出一个权值最小的边,这样的操作重复N-1次,由N-1条权值最小的边组成的生成树就是最小生成树...翻译 2022-08-30 23:16:24 · 368 阅读 · 0 评论 -
(14.5 贪心算法的基本介绍及其应用)
贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。{看着这个名字,贪心,贪婪这两字的内在含义最为关键。这就好像一个贪婪的人,他事事都想要眼前看到最好的那个,看不到长远的东西,也不为最终的结果和将来着想,贪图眼前局部的利益最大化,有点走一步看一步的感觉。}...翻译 2022-08-30 22:59:55 · 248 阅读 · 0 评论 -
(14.4 暴力匹配算法和KMP算法的介绍及其应用)
暴力匹配也称为简单匹配算法,采用穷举的思想。KMP算法相比较暴力算法,有很大的改进,消除了主串指针的回溯翻译 2022-08-30 14:06:06 · 113 阅读 · 0 评论 -
(14.3 动态规划算法的介绍实践及其代码实现)
在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线.这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策问题。在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转翻译 2022-08-29 00:42:27 · 382 阅读 · 0 评论 -
(14.2 分治算法的基本介绍及其代码实现)
分治算法,根据字面意思解释是"分而治之",就是把一个复杂的问题分成俩个或更多的相同或相似的子问题,再把子问题分成更小的子问题......直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。...翻译 2022-08-29 00:24:48 · 168 阅读 · 0 评论 -
(14.1 二分查找[非递归]算法的介绍及其实现)(十四章 10种程序员常用的算法)
二分查找又称折半查找,它用来解决"在一堆数中找出指定的数(也可能找了,发现没有)"这类问题翻译 2022-08-29 00:10:54 · 62 阅读 · 0 评论 -
(13.1 图的基本介绍及其深度,广度优先遍历)(第十三章图)
图(Graph)是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系翻译 2022-08-19 16:25:43 · 66 阅读 · 0 评论 -
(12.1 二叉树与B树以及B树,B+,B*的介绍)
简单介绍了一下B树,B+,B*翻译 2022-08-17 22:39:06 · 72 阅读 · 0 评论 -
(11.5 平衡二叉树(AVL树)的基本介绍及其应用案例)
平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构。采用二分法思维把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提高了数据检索的速度...翻译 2022-08-14 21:07:08 · 583 阅读 · 0 评论 -
(11.4 二叉排序树的基本思路介绍及其代码实现)
二叉排序树是一种比较有用的折衷方案。数组的搜索比较方便,可以直接用下标,但删除或者插入某些元素就比较麻烦。链表与之相反,删除和插入元素很快,但查找很慢。而二叉排序树可以让查找,删除,添加的效率都变得很高(因为二叉排序树是有序的,所以添加也即是插入)也就使二叉排序树既有链表的好处,也有了数组的好处在处理大批量的动态的数据是比较有用的......翻译 2022-08-11 17:25:47 · 129 阅读 · 0 评论 -
(11.3 赫夫曼编码基本介绍及其代码实现)
代码实现:4:最佳实践-数据压缩(生成赫夫曼编码和赫夫曼编码后的数据) 代码实现:5:最佳实践-数据压缩(使用赫夫曼编码解码) 代码实现:6:最佳实践-文件压缩 代码实现:7:最佳实践-文件解压(文件恢复) 代码实现:8:代码汇总,把前面的方法放到一起9:赫夫曼编码压缩文件注意事项...翻译 2022-08-09 15:32:48 · 144 阅读 · 0 评论 -
(11.2 赫夫曼树的基本介绍及其代码实现)
代码】(11.2赫夫曼树的基本介绍及其代码实现)翻译 2022-07-27 15:44:17 · 71 阅读 · 0 评论 -
(11.1 堆排序基本介绍及其代码实现)(第十一章树结构实际应用)
堆排序的基本介绍及其代码实现翻译 2022-07-14 16:41:38 · 69 阅读 · 0 评论 -
(10.3 线索化二叉树的基本介绍及其中序遍历)
引入线索二叉树的目的是找一个结点的前驱后继的时候,比非二叉线索树方便快捷。按照某种遍历方式对二叉树进行遍历,可以把二叉树只所有结点排序为一个线性序列翻译 2022-07-09 15:36:00 · 109 阅读 · 0 评论 -
(10.2 顺序存储二叉树的概念及其遍历实现)
1:顺序二叉树的概念2:顺序存储二叉树的遍历对数组{1,2,3,4,5,6,7},要求以二叉树前序遍历的方式进行遍历。结果应当为{1,2,4,5,3,6,7}代码实现:package com.tian.tree;/** * @author Tian Email:1700468932@qq.com * @create 2022-05-18 20:54 */public class ArrBinaryTreeDemo { public static void ma翻译 2022-05-23 09:47:33 · 190 阅读 · 0 评论 -
(10.1 二叉树的基础概念及其代码实现)(第十章 二叉树)
1:二叉树的概念2:二叉树遍历3:二叉树遍历应用实例4:二叉树-查找指定结点5:二叉树-删除结点代码实现:public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一个二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的结点 HeroNode..翻译 2022-05-19 21:51:09 · 85 阅读 · 0 评论 -
(9.1 哈希表的介绍和Google上机题)(第九章 哈希表)
9.3 google公司的一个上机题public class HashTabDemo { public static void main(String[] args) { //创建哈希表 HashTab hashTab = new HashTab(7); //写一个简单的菜单 String key = " "; Scanner scanner = new Scanner(System.in); ...翻译 2022-05-11 23:41:26 · 77 阅读 · 0 评论 -
(8.1 Java中常见的查找算法及其代码实现)(第八章 查找算法)
8.1 查找算法介绍:8.2 线性查找算法: 有一个数列{1,8,10,89,1000,1234},判断数列中是否包含此元素【顺序查找】要求:如果找到了就提示找到,并给出下标值public class SeqSearch { public static void main(String[] args) { int[] arr = {1, 9, 11, -1, 34, 89};// 没有顺序的数组 int index = seqSearch...翻译 2022-05-11 23:17:56 · 398 阅读 · 0 评论 -
(7.7 基数排序算法的实现及思路)
1:基数排序(桶排序)介绍2:基数排序基本思想这样说明比较难理解,下面图文解释更容易理解基数排序的思想:3:基数排序代码实现public class RadixSort { public static void main(String[] args) {// int arr[] = {53, 3, 542, 748, 14, 214}; // 80000000 * 11 * 4 / 1024 / 1024 /1024 = 3.3G翻译 2022-04-27 20:42:15 · 105 阅读 · 0 评论 -
(7.6 归并排序算法的实现及思路)
1:归并排序介绍2:归并排序思想示意图(基本思想)3:归并排序思想示意图(合并相邻有序子序列)4:归并排序的应用实例将数组Val arr = Array(8,4,5,7,1,3,6,2),使用归并排序完成排序代码实现:public class MergeSort { public static void main(String[] args) {// int arr[] = {8, 4, 5, 7, 1, 3, 6, 2};翻译 2022-04-18 21:09:38 · 174 阅读 · 0 评论 -
(7.5 快速排序算法实现及思路)
1:快速排序法介绍2:快速排序法示意图 3:快速排序法应用实例public class QuickSort { public static void main(String[] args) {// int[] arr = {-9, 78, 0, 23, -567, 70,-1,999,234}; //创建80000个随机的数组 int[] arr = new int[800000]; for ..翻译 2022-04-15 22:29:44 · 109 阅读 · 0 评论 -
(7.4 希尔排序算法[交换法][移位法]的实现及思路)
1:简单排序存在的问题2:希尔排序法介绍希尔排序是希尔(Donald Shall) 于 1959年提出的一种排序算法,希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序3:希尔排序基本思想4:希尔排序法的示意图5:希尔排序法应用实例public class ShellSort { public static void main(String[] args) {// int[] arr = ..翻译 2022-04-11 18:10:30 · 243 阅读 · 0 评论 -
(7.3 插入排序算法的实现及思路)
插入排序思路图:插入排序应用实例:public class InsertSort { public static void main(String[] args) {// int[] arr = {101, 34, 119, 1,-1,89}; //创建80000个随机的数组 int[] arr = new int[80000]; for (int i = 0; i < 80000; i++) { ..翻译 2022-04-06 13:08:39 · 112 阅读 · 0 评论 -
(7.2 选择排序算法实现及思路)
选择排序思想:选择排序思路分析图: 选择排序应用实例:翻译 2022-04-05 21:51:53 · 124 阅读 · 0 评论 -
(7.1 冒泡排序算法的实现及其思路) (第7章 排序算法)
代码实现:public class BubbleSort { public static void main(String[] args) {// int[] arr = {3, 9, -1, 10, 20};//// System.out.println("排序前");// System.out.println(Arrays.toString(arr)); //为了容易理解,我们把冒泡排序的演变过程,给大家展示...翻译 2022-04-02 16:26:50 · 89 阅读 · 0 评论 -
(6.3 八皇后问题分析和实现)
public class Queue8 { //定义一个max表示共有多少个皇后 int max = 8; //定义数组array,保存皇后放置位置的结果,比如arr = {0,4,7,5,2,6,1,3} int[] array = new int[max]; static int count = 0; static int judgeCount = 0; public static void main(String[] args)...翻译 2022-03-30 22:00:46 · 107 阅读 · 0 评论 -
(6.2 迷宫回溯问题分析与实现)
package com.tian.recursion;/** * @author Tian Email:1700468932@qq.com * @create 2022-03-11 21:37 */public class MiGong { public static void main(String[] args) { //先创建一个二维数组,模拟迷宫 //地图 int[][] map = new int[8][7]; ...翻译 2022-03-17 15:31:11 · 83 阅读 · 0 评论 -
(6.1 递归调用机制及其概述)(第六章 递归)
通过下面代码理解递归的调用机制:public class RecursionTest { public static void main(String[] args) { test(4); System.out.println("***********"); test1(4); } public static void test(int n) { if (n > 2) { tes..翻译 2022-03-07 15:20:37 · 65 阅读 · 0 评论 -
(5.4 中缀表达式转后缀表达式)
package com.tian.stack;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * @author Tian Email:1700468932@qq.com * @create 2022-02-23 23:00 */public class PolandNotation { public static void main(Strin...翻译 2022-03-06 15:52:52 · 342 阅读 · 0 评论 -
(5.3逆波兰计算器分析和实现)
代码实现:package com.tian.stack;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * @author Tian Email:1700468932@qq.com * @create 2022-02-23 23:00 */public class PolandNotation { public static void main(String[] ar..翻译 2022-02-24 22:14:35 · 426 阅读 · 0 评论 -
(5.2栈实现综合计算器(中缀表达式))
代码实现:翻译 2022-02-18 12:27:55 · 101 阅读 · 0 评论 -
(5.1栈的代码实现)实现栈的思路分析及其代码实现(第五章 栈)
代码实现:package com.tian.stack;import java.util.Scanner;/** * @author Tian Email:1700468932@qq.com * @create 2022-01-29 16:06 */public class ArrayStackDemo { public static void main(String[] args) { //测试一下ArrayStack 是否正确 //先创..翻译 2022-01-29 17:09:13 · 101 阅读 · 0 评论 -
(4.4约瑟夫问题分析图解和实现)
代码实现思路:public class Josephu { public static void main(String[] args){ //测试一把看看构建环形链表,和遍历是否ok CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList(); circleSingleLinkedList.addBoy(25); ...翻译 2022-01-25 21:55:29 · 183 阅读 · 0 评论 -
(4.3双向链表的应用实例)
代码思路实现:public class DoubleLinkedListDemo { public static void main(String[] args) { //测试 System.out.println("双向链表的测试"); //先创建节点 HeroNode2 hero1 = new HeroNode2(1, "天", "呜呜"); HeroNode2 hero2 = new HeroNod...翻译 2021-12-25 15:04:12 · 142 阅读 · 0 评论 -
(4.2单链表的面试题)新浪,百度,腾讯
1.求单链表的有效节点个数2.查找单链表中的倒数第k个节点【新浪面试题】3.单链表的反转【腾讯面试题,有点难度】翻译 2021-12-24 21:09:55 · 62 阅读 · 0 评论 -
(4.1单链表的应用)单链表的应用以及增删改查(第四章 链表)
显示链表的代码:单链表需要的结构:翻译 2021-12-22 23:18:47 · 71 阅读 · 0 评论