数据结构与算法
文章平均质量分 50
学习各类编程算法,进行总结归纳,提高自主编程能力
奋斗中的小余
一个正在奋斗的大学生。喜欢自学,学习时间大部分都花在b站上。正在往两个方向发展:1.web全栈开发 2.影视动画后期。平时也研究摄影摄像。现在正在不断学习的过程中。非常愿意和一些志同道合的朋友交流。
展开
-
数据结构之栈和队列(双向链表及数组实现)
数据结构之栈和队列(双向链表及数组实现)逻辑概念:栈:数据先进先出,犹如弹匣队列:数据先进先出,好似排队1. 栈和队列的实现(Java)双向链表实现(对链表不熟悉的可以看我的另一篇文章数据结构之单双向链表):实现队列(双向):// 双向链表结构public class DoubleNode { public int value; public DoubleNode pre; public DoubleNode next; public DoubleNode(int原创 2021-12-28 07:30:00 · 313 阅读 · 0 评论 -
算法检验-对数器
算法检验-对数器实现某种功能的方法,肯定会存在多种实现的思路;当我们进行方法编写的时候,首先会选用最优的算法编写,使性能最大化;最优的算法通常思路比较复杂,光看肉眼检查代码或手动执行看结果检查正确性,往往比较困难且不可靠,这就是对数器要解决的问题。1. 认识对数器你想要进行检验的方法a实现复杂度不好但容易实现的方法b实现一个随机样本产生器把方法a和方法b传入生成的数据样本执行,看同一样本得到的结果是否相同如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,对方法进行改进当样本数量原创 2021-12-26 23:27:08 · 395 阅读 · 1 评论 -
数据结构之堆结构
数据结构之堆结构堆结构:堆结构就是用数组实现的完全二叉树结构,堆结构分为两种:大根堆、小根堆完全二叉树中如果每棵树的最大值都在顶部就是大根堆完全二叉树中如果每棵树的最小值都在顶部就是小根堆图解:堆结构的实现:实现思路:根据二叉树与数组索引的关系可以得出:根部对应数组的位置为 i :左孩子对应数组位置为2 * i + 1,右孩子对应数组位置为2 * i + 2孩子对应数组位置为 i ,其根部对应数组位置为(i - 1) / 2并向下取整大根堆pus原创 2021-12-26 17:40:59 · 386 阅读 · 0 评论 -
数据结构之单向链表与双向链表-简单介绍与练习
数据结构之单向链表与双向链表-简单介绍与练习1. 单向链表单向链表中,前一个节点保存着下一个节点的内存地址,下一个节点保存着下下个节点的内存地址,… ,最后一个节点后指向null单向链表在数据的搜寻过程中,只能按顺序单向执行下去创建一个单向链表,一般返回的是头部节点,因为利用头部节点可以顺着单向链获得其他所有节点单向链表节点结构(可实现成泛型):public class Node { public int value; public Node next; public原创 2021-12-25 02:25:04 · 670 阅读 · 0 评论 -
排序算法之归并排序
排序算法之归并排序1. 常见排序算法的时间复杂度:时间复杂度为 O(N ^ 2) 的有:选择排序、冒泡排序、插入排序时间复杂度为 O(N * log N) 的有:归并排序、快速排序时间复杂度为O(N * log N)的算法比时间复杂度为 O(N ^ 2)的算法好的多时间复杂度就相当于数组的长度N与执行时间的关系时间复杂度的表示,按算最坏的情况看,而且忽略常数时间(执行时间确定的时间)算法的时间复杂度表示相同,它的区别是常数时间不同,但要排序的数组长度很长时,常数时间的影响可以忽略不计2原创 2021-12-24 23:27:58 · 445 阅读 · 0 评论 -
算法基础-位运算之异或运算-性质及面试题讲解
算法基础-位运算之异或运算-性质及面试题讲解1. 认识异或运算两个数在进行异或运算时,可以理解为两个数的二进制对应位上的数向比较,相同为0,不同为1,如:9(1001) ^ 10(1010) = 3(0011)简单点也可以记为,两个数二进制位上的无进位相加,如:5(101) ^ 6(110) = 3(011) 其中从左到右第1位1+1 忽略进位,此位剩 0,第2位 0 + 1 = 1 不进位,第3位1 + 0 = 1 不进位 结果为 011异或运算的性质(大家试着用例子去尝试,可以很容原创 2021-12-22 23:49:05 · 542 阅读 · 0 评论 -
位运算符的详细解析及妙用
位运算的符详细解析1. 按位与(&)位运算符 “&” 对它的整型操作数逐位执行布尔与(AND)操作。只有两个操作数中相对应的位都是1,结果中的这一位才是1。例如,0b10010 & 0b11001 = 0b10000。2. 按位或(I)位运算符 “|” 对它的整型操作数逐位执行布尔或(OR)操作。如果其中一个操作数相应的位为1,或者两个操作数相应位都是1,那么结果中的这一位就为1。例 如:0b10010 & 0b11001 = 0b11011。3. 按位异或(^)原创 2021-11-24 01:19:20 · 1833 阅读 · 1 评论 -
排序算法之冒泡排序
排序算法之冒泡排序排序过程:在arr[0 ~ N-1]范围上(N表示数组长度):arr[0]和arr[1]谁大谁的位置就到1,arr[1]和arr[2]谁大谁的位置就到2,… ,arr[N-2]和arr[N-1]谁大谁位置就在N-1。这样遍历一遍就可以将范围中最大的数放到最后。在arr[0 ~ N-2]范围上(相对上一步末尾范围-1):重复上一步的过程,最后一步是arr[N-3]和arr[N-2],谁大谁往后。…最后在arr[0~1]的范围上,重复上面的过程,谁大就谁在1的位置原创 2021-12-18 13:47:02 · 1197 阅读 · 0 评论 -
排序算法之插入排序
排序算法之插入排序排序过程:让arr[0~1]上有序,所以从arr[1]开始往前看,如果arr[1] < arr[0],就交换。否则什么也不做。让arr[0~2]上有序,所以从arr[2]开始往前看,如果arr[2] < arr[1],就交换,再判断arr[1]和arr[0]。否则什么也不做。…让arr[0~i]上有序,所以从arr[i]开始往前看,arr[i]不断的向左对比和移动,一直移动到左边的数字不再比自己大,停止移动。算法的复杂程度会因为数据的状况的不同而不同,如你可以比原创 2021-12-18 13:09:54 · 746 阅读 · 0 评论 -
排序算法之快速排序
排序算法之快速排序1. 一些常见的算法运行时间下面按从快到慢的顺序列出了你经常会遇到的5种算法运行时间,它们表示运行时间与元素个数的关系。O(log n),相当于y = log2 n ,也叫对数时间,这样的算法包括二分查找。O(n),相当于y = n ,也叫线性时间,这样的算法包括简单查找。O(n * log n),相当于y = n ,这样的算法包括快速排序 —— 一种速度较快的排序算法。O(n2),相当于y = n * n 这样的算法包括选择排序 —— 一种速度较慢的排序算法。O(n!)原创 2021-12-13 00:09:12 · 1367 阅读 · 0 评论 -
排序算法之选择排序
选择排序算法1. 一些常见的算法运行时间下面按从快到慢的顺序列出了你经常会遇到的5种算法运行时间,它们表示运行时间与元素个数的关系。O(log n),相当于y = log2 n ,也叫对数时间,这样的算法包括二分查找。O(n),相当于y = n ,也叫线性时间,这样的算法包括简单查找。O(n * log n),相当于y = n ,这样的算法包括快速排序 —— 一种速度较快的排序算法。O(n2),相当于y = n * n 这样的算法包括选择排序 —— 一种速度较慢的排序算法。O(n!),相当原创 2021-12-10 14:35:49 · 556 阅读 · 0 评论 -
数组和链表的分析与对比
数组和链表的分析与对比1. 内存的工作原理计算机就像是很多抽屉的集合体,每个抽屉都有自己的地址。需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它们的差别很重要。接下来介绍数组和链表以及它们的优缺点。2. 数组和链表有时候,需要在内存中存储一系列元素。那么,应使用数组还是链表呢?使用数组意味着所有元素在内存中都是相连的(紧靠在一起的)。举个例子:...原创 2021-12-10 13:03:13 · 692 阅读 · 0 评论 -
编程算法之二分法详解(二分不一定要有序)
编程算法之二分查找二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。下面的示例说明了二分查找的工作原理:我随便想一个1~100的数字。你的目标是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。1. 假设你从1开始依次往上猜,这是简单查找,更准确的说法是傻找。每次猜测都只能排除一个数字。如果我想的数字是99,你得猜99次才能猜到!2. 下面是一种更佳的猜法。从50 开始。 - 小了,原创 2021-12-08 23:31:56 · 3224 阅读 · 0 评论