数据结构与算法
文章平均质量分 89
数据结构与算法
哪 吒
2022博客之星Top1,现象级专栏 《Java基础教程系列》作者,专注Java硬核干货分享,立志做到Java赛道全网Top N
展开
-
Java基础算法看这一篇就够了,简单全面一发入魂
一、算法编写一段计算机程序一般都是实现一种已有的方法来解决某个问题。这种方法大多和使用的编程语言无关,它适用于各种计算机及编程语言。是这种方法而非计算机程序本身描述了解决问题的步骤。在计算机科学领域,我们用算法这个词来描述一种有限、确定、有效的并适合用计算机程序来实现的解决问题的方法。算法是计算机科学的基础,是这个领域的核心。要定义一个算法,我们可以用自然语言描述解决某个问题的过程或是编写一点程序来实现这个过程。大多数算法都需要适当地组织数据,而为了组织数据就产生了数据结构,数据结构也是计算机科学研究原创 2022-05-18 08:56:56 · 13969 阅读 · 10 评论 -
常见的八大排序算法
目录一、算法思维导图二、算法分类三、冒泡排序1、基本思想2、动态效果图3、代码实现4、速度测试四、选择排序1、基本思想2、动态效果图3、代码实现4、速度测试五、插入排序1、基本思想2、动态效果图3、代码实现4、速度测试六、希尔排序1、基本思想2、效果图3、代码实例七、快速排序1、基本思想2、效果图3、算法描述4、代码实例5、速度测试八、归并排序1、基本思想2、效果图3、代码实现4、速度测试九、基数排序1、基本思想2、动态效果图3、代码实例4、速度测试一、算法思维导图二、算法分类算法的时间复杂度和空原创 2022-02-17 07:51:20 · 16995 阅读 · 25 评论 -
MD5与AES浅谈
一、MD5简介MD5全称为信息-摘要算法(哈希算法),是计算机安全领域的散列函数,用于确保消息的完整性。另外摘要算法还有SHA1。MD5是一种单向加密算法,它的加密不可逆,它将任意长度的字符串,经过计算后生成固定长度的数据,一般为16位。二、MD5的用途1、消息完整性每份数据生成的MD5码不同,所以可以把MD5码和数据一块发送,在对端使用MD5加密,再与接收的MD5码进行对比,保证数据的正确性。2、安全访问认证用于传递用户账户信息和密码到MySQL数据库,客户端发送到服务器的只是转载 2021-05-01 15:48:25 · 5451 阅读 · 1 评论 -
数据结构与算法
一、前言数据结构,是指相互之间存在一种或多种特定关系的数据关系的集合,用计算机存储、组织数据的方式。数据结构分为逻辑结构、物理结构和数据的运算三大部分。二、为什么要学数据结构1、因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它;2、数据结构是计算机软考、计算机等级考试等相关考试的必考内容之一,想要顺利通过这些考试,你也必须学好它;3、数据结构是其它计算机课程的基础,如操作系统、编程原理、数据库管理系统、软件工程、人原创 2020-05-19 16:39:12 · 24924 阅读 · 14 评论 -
【数据结构与算法 1】稀疏数组
一、稀疏数组1、概念当一个数组中部分元素是0,或者为同一个值的数组,可以使用稀疏数组来保存该数据。稀疏数组的处理方法:记录数组一共有几行几列,有多少个不同的值; 把具有不同值的元素的行列和值记录在一个小规模的数组中,从而缩小程序的规模。2、存储原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少; 压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率。二、代码实例package com.atguigu.s原创 2020-05-11 11:38:02 · 8408 阅读 · 1 评论 -
【数据结构与算法 2】循环队列
一、队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。二、循环队列原创 2020-05-13 10:46:18 · 11594 阅读 · 0 评论 -
【数据结构与算法 3】单链表
一、链表的特点1、链表是一种非线性、非顺序的物理结构,是由多个节点组成。2、链表采用的是“见缝插针”的存储方法,不要求内存连续,靠next指针关联起来。3、链表的物理存储方式为随机存储,访问方式为顺序访问。4、查找节点的时间复杂度为O(n),插入、删除节点的时间复杂度为O(1)。5、链表适用于写操作多,读操作少的场景。二、单链表链表是有序的列表,但是它在内存中存储如下:上图小结:1、链表是以节点的方式来存储,是链式存储2、每个节点包含data域,next域:指向下原创 2020-05-13 13:49:12 · 8713 阅读 · 1 评论 -
【数据结构与算法 4】单链表面试题
一、获取到单链表的节点的个数/** head 链表的头节点* 返回有效节点的个数,没有统计头节点* */public static int getLength(HeroNode head) { if(head.next == null) { return 0; } int length = 0; //定义一个辅助变量 HeroNode cur = head.next; while(cur != null) { length++; cur = cur.next;原创 2020-05-13 17:25:16 · 3681 阅读 · 0 评论 -
【数据结构与算法 5】环形链表解决约瑟夫问题
目录循环链表分类名称无情 大风歌 asdf asdfasdf按时 阿斯蒂芬 asdf原创 2020-05-16 11:05:46 · 4344 阅读 · 0 评论 -
【数据结构与算法 6】栈实现综合计算器
一、栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。二、栈的应用场景1、子程序的调用在调往子程序前,会先将下个指令的地址存放到堆栈中,直到子程序执行完后再将地址抛出,以回到原来的程序。2、处理递归调用和子程序的调用原创 2020-05-18 15:31:05 · 3530 阅读 · 0 评论 -
【数据结构与算法 7】中缀表达式转为后缀表达式,实现逆波兰计算器
一、中缀表达式中缀表达式是一个通用的算术或逻辑公式表示方法。我们小学学的加减乘除就是所谓的中缀表达式,便于人类计算的表达式。例如:(3+4)* 5 - 6二、前缀表达式和后缀表达式(3+4)* 5 - 6的前缀表达式是- * + 3 4 5 6(3+4)* 5 - 6的后缀表达式是 3 4 + 5 * 6 -后缀表达式较为常用,计算机熟悉的表达式,真狗。三、中缀表达式转后缀表达式这个有一个固定的思路,就像降龙十八掌秘籍一样,照着练就行了,如果你非要自创黯然销魂掌,你得自.原创 2020-05-19 16:15:34 · 3994 阅读 · 1 评论 -
【数据结构与算法 8】递归之迷宫问题
一、简介递归就是方法自己调用自己,每次调用时传入不同的参数,递归有利于编程者解决复杂的问题,同时可以让代码变得简洁。二、用一个例子引出递归概念public static void test(int n){ if(n>2){ test(n-1); } System.out.println("n="+n);}打眼一看,很low,很简单,4,3,2无疑。为了验证我的聪明才智,输出一把吧三、递归调用规则(很重要)1、执行一个方法时原创 2020-05-20 10:42:01 · 5440 阅读 · 0 评论 -
【数据结构与算法 9】谁发明的八皇后,本宫赐你一丈红
一、八皇后问题八皇后问题,一个古老而著名的问题,是回溯算法的经典案例。该问题由国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。二、基本思路1、第一个皇后先放第一行第一列;2、第二个黄瓜放在第二行第二列、然后判断是否OK,如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适的;3、继续第三个皇后,还是第一列、第二列.....直到第八个皇后也..原创 2020-05-20 15:21:19 · 3947 阅读 · 1 评论 -
【数据结构与算法 10】算法的时间复杂度和空间复杂度
最近在研究数据结构与算法,在B站中找到了小甲鱼的《数据结构与算法课程》,挺有意思的!(小甲鱼)数据结构和算法对于一个算法来说,分析有两步,第一是从数学上证明算法的正确性,第二步是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能反映出算法的优劣与否。度量一个程序的执行时间通常有两种方法。一、事后统计的方法该方法有两个缺陷:...转载 2020-05-04 22:44:19 · 5834 阅读 · 0 评论 -
【数据结构与算法 12】二分查找、插值查找、斐波那契查找
一、前言查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如在编译程序中符号表的查找。本文简单介绍二分查找、插值查找、斐波那契查找。查找算法分类:1、静态查找和动态查找2、无序查找和有序查找二、二分查找1、基本思想也称为折半查找,属于有序查找算法。用给定值value先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等,则查找成功;若不相等,再根据K与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束原创 2020-05-26 14:57:14 · 4714 阅读 · 0 评论 -
【数据结构与算法 13】二叉树
一、前言数组的搜索比较方便,可以直接用下标,但删除和插入就比较麻烦;链表与之相反,删除和插入元素很快,但查找比较慢;此时,二叉顺序树应运而生,二叉顺序树既有链表的好处,也有数组的好处,在处理大批量的动态数据时比较好用,是一种折中的选择。文件系统和数据库系统一般都是采用树(特别是B树)的数据结构数据,主要为排序和检索的效率。二叉顺序树是一种最基本最典型的排序树,用于教学和研究树的特性,本身很少在实际中进行应用,因为缺点太明显,就像冒泡排序一样,因为效率问题并不实用,但也是我们必须会的。原创 2020-05-28 16:34:09 · 4586 阅读 · 1 评论 -
线索化二叉树的作用
一、先看一个问题将数列{1,3,6,8,10,14}构建成一颗二叉树。问题分析:当我们对上面的二叉树进行中序遍历时,数列为{8,3,10,1,6,14}。 但是6,8,10,14这几个节点的左右指针,并没有完全的利用上。 如果我们希望充分的利用各个节点的左右指针,让各个节点可以指向自己的前后节点,要怎么办? 解决方案 --> 线索化二叉树二、线索化二叉树1、n个节点的二叉树链表总含有n+1(公式2n-(n-1)=n+1)个空指针域。...原创 2021-08-16 07:02:32 · 16371 阅读 · 137 评论