数据结构+算法
数据结构与算法学习总结
张漂亮’s Blog
这个作者很懒,什么都没留下…
展开
-
二叉树、平衡树、红黑树
1.二叉树:复杂度为o(logn),二分查找。任何节点的左边都比它小,右边都比它大;缺点:有可能会退化成链表,此时复杂度为O(n);2.平衡二叉树原则:左子树与右子树的高度差小于等于1;优点:解决了二叉查找退化为链表的缺点,能把查找时间复杂度控制在O(logn);缺点:每次增删几乎都会破坏左子树与右子树高度差<=1的原则,需要左旋或者右旋,使得性能大打折扣;3.红黑树每个节点到叶子节点的路径,经过的黑色节点数相同,复杂度为O(logn);增删节点不易打破红黑树的规则原创 2021-12-24 10:31:49 · 703 阅读 · 0 评论 -
MySQL 日期转换成字符串
select DATE_FORMAT(a.OPERATE_TIME,'%Y-%m-%d %H:%i:%s') AS OPERATE_TIME结果:2021-03-24 15:40:59参考文章:http://www.360doc.com/content/19/0404/10/40984640_826349929.shtml参考文章2原创 2021-03-24 17:41:15 · 209 阅读 · 0 评论 -
排序算法总结
1. 稳定:如果a原本在b前面,而a=b, 排序之后a仍然在b前面;2. 不稳定:如果a原本在b前面,而a=b,排序之后a可能会出现在b后面;3. 内排序:所有排序操作都在内存中完成;4. 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;5. 时间复杂度:一个算法执行所耗费的时间;6. 空间复杂度:运行完一个程序所需内存的大小;7. n: 数据规模;8. k: "桶"的个数;9. In-place:不占用额外内存;10. Out-place:占用额外内.原创 2020-08-19 19:41:14 · 95 阅读 · 0 评论 -
排序算法-7-基数排序
一、基本思想基数排序是高效稳定排序,它通过键值的各个位的值,将要排序的元素分配到某些桶中以达到排序的目的,也叫桶子法,是桶排序的扩展。基数排序图文说明以这一组数为例: {12,8,29,384,0,912,6}先按照各位数,将数值放入对应的桶中,遍历完后再从桶中取出存入原数组;再将数组中的数按照十位上的数,将其放入对应的桶中,遍历完后再从桶中取出存入原数组;最后将数组中的数按照百位上的数,将其放入对应的桶中,遍历完后再从桶中取出存入原数组;由于上面这一组数据中,最大的数是三位数,原创 2020-08-18 21:03:47 · 212 阅读 · 0 评论 -
排序算法-6-归并排序
一、基本思想归并排序:二、代码实现三、性能对比原创 2020-08-11 19:10:36 · 238 阅读 · 0 评论 -
排序算法-5-快速排序
一、基本思想快排是对冒泡排序的一种改进,基本思想是:通过一趟排序将数组分成左右两部分,使得左边的所有数都比右边的所有数小,然后再对左右两部分分别进行快速排序,可以递归进行,使得整个数组有序排列。向左递归:直至R指针>=left,则左递归结束;向右递归:直至L指针<=right, 则右递归结束;快速排序逻辑图二、代码实现package sort;import java.util.Arrays;/** * 快速排序 * 思路分析: * (1)首先找一个中轴数,以这个数为轴原创 2020-08-08 12:47:17 · 133 阅读 · 0 评论 -
排序算法-4-希尔排序
一、基本思想希尔排序是希尔提出的,是通过引入增量,对简单插入排序的改进的高效版本,也叫缩小增量排序。希尔排序是把数据按照下标的一定增量分组,对每组数据进行直接插入排序算法进行排序。随着增量主键减小,每一组包含的数据越来越多,当增量减至1时,所有数据恰被分成一组,算法进行最后一轮排序,使所有数据顺序排列。希尔排序示意图:二、代码实现此处以从小到大排序为例,用两种方式实现:1)当发现待插入的数比同组数据大时,直接交换位置;2)当发现待插入的数比同组数据大时,将较小的数向后移动,直到找到合适位置原创 2020-08-03 21:14:13 · 155 阅读 · 0 评论 -
排序算法-3-插入排序
一、插入排序基本思想主要思想(以从小到大排序为例):1)给定一个含有n个数的数组,将其看成一个有序列表和一个无序列表,有序列表中1个数,无序列表中n-1个数。2)遍历无需列表(n-1轮),每一轮从无序列表取一个数就和有序列表中的数比较大小,直到找到合适的位置将其插入有序列表。3) n-1轮遍历结束后,无序列表中的所有数都插入到了有序列表的合适位置,所有数据排序完毕。二、代码实现package sort;import java.text.SimpleDateFormat;import jav原创 2020-08-02 12:45:06 · 161 阅读 · 0 评论 -
排序算法-2-选择排序
一、选择排序基本思想给定一组数据,从这组数中找到最小的数,将最小的数和第一个数互换顺序(以从大到小排序为例),再进行第二次比较,从剩余待排序数据的第一个值开始找到所有数据中的最小值,和第二个数互换位置,以此类推。即:每次从待排序的所有数中找到最小的值,按顺序排列,直到所有数据按序排列。如果有n个数,选择排序一共进行n-1轮比较,每一轮寻找最小值时,进行 n-i-1 次比较(i代表当前是第几轮遍历) 。二、代码实现package sort;import java.text.SimpleDateFo原创 2020-08-01 22:40:12 · 253 阅读 · 0 评论 -
排序算法-1-冒泡排序
一、冒泡排序基本思想给定一组数据,从前到后依次比较相邻数据,如果发现相邻的两个数逆序,则交换顺序,使较大的值逐渐从前向后移动(以从大到小排序为例),接着进行第二轮遍历,从头开始,直到第二大的数据排在倒数第二个位置,依次类推,每一轮比较都会将剩余数据中的最大值冒泡出来。【优化】:当一轮比较中,发现没有一次交换位置,说明此时数据已经按顺序排列了,可以提前跳出循环,从而减少不必要的比较。二、代码实现package sort;import java.text.SimpleDateFormat;imp原创 2020-08-01 22:27:07 · 109 阅读 · 0 评论 -
栈与计算器实现
文章目录一、栈的介绍二、栈的使用场景三、栈的入门1、实现思路分析:2、代码实现四、中缀表达式与后缀表达式1、中缀表达式中缀表达式实现计算器2、后缀表达式(逆波兰表达式)3、中缀表达式转后缀表达式中缀表达式转后缀表达式、并实现计算器功能五、逆波兰计算器完整功能一、栈的介绍1)栈(stack)是一个先进后出(FILO)的有序列表;2)栈是限制线性表中的元素只能从一端插入和删除的特殊线性表,允许插入和删除的一端为栈顶,固定的一端为栈底。二、栈的使用场景1.子程序调用;2.处理 递归调用;3.表达式原创 2020-07-29 18:16:39 · 178 阅读 · 0 评论 -
单向环形链表-约瑟夫问题
一、单向环形链表如图,链表的最后一个节点的next指向链表的第一个节点,形成一个环形链表。二、单向环形链表使用场景-约瑟夫问题josephu(约瑟夫、约瑟夫环)问题:设编号为1,2,3…n的 n个人坐成一圈,编号为k(1<=k<=n )的人从1开始报数,数到m的那个人出列, 他的下一位继续从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。三、约瑟夫问题分析用一个不带头节点的单向环形链表来实现:首先生成一个 带有 n 个节点的单向环原创 2020-07-17 22:32:36 · 266 阅读 · 0 评论 -
线性表-双向链表
双向链表优缺点:双向链表:有两个指针,一个指向前一个节点,一个后一个节点。优点:与单向链表相比,可以找到前驱和后继,可进可退;缺点:增加删除节点复杂,需要多分配一个指针存储空间。适用于需要双向查找节点值的情况。代码实现package linkedlist;import org.junit.Test;/** * 双向链表 * @author * @create 2020-07-16 6:16 PM */public class DubboLinkedListDemo {原创 2020-07-16 22:54:12 · 122 阅读 · 0 评论 -
线性表 - 单向链表
链表介绍:链表是以节点的方式链式存储的有序列表,链表中的每个节点在内存空间上不一定是连续的,可以利用内存空间中细小的不连续空间,内存使用率高,链表是动态分配内存的扩展灵活。单向链表单向链表在内存中的存储如下:特点:每个节点包括 data域 和 next域,next指向下一个节点的地址;链表中的每个节点在内存空间上不一定是连续的。链表分为带头节点的和不带头节点的,对于带头节点的链表,头节点不存放数据,只用于表示链表的开始。带头节点的单向链表逻辑结构如下:单向链表使用实例一. 逻辑分析原创 2020-07-15 20:11:14 · 210 阅读 · 0 评论 -
队列- 用数组实现环形队列
一、队列介绍队列是一个有序列表,可以用数组或链表来实现;队列遵循FIFO原则(first in first out )二、数组实现队列的思路分析队列本身是有序列表,要生命一个队列,首先要定义:maxsize:队列最大容量;front:队列头部元素的下标(此处约定从0开始)即:队列的第一个元素就是arr[front];rear:队列尾部元素的下一个位置(此处约定rear从0开始);队列满:(rear+1)% maxsize == front;队列空:rear==front;当前队列中原创 2020-07-13 12:46:45 · 410 阅读 · 0 评论 -
稀疏数组
稀疏数组简介:当数组中大部分数据为零,或者大部分数据为同一个值时,可以用稀疏数组来保存该数组,从而节省空间。稀疏数组是一个n行3列的数组,第一行保存原始数组的总行数、总列数、一共有多少个不同数值。之后每一行都代表原始数组中每一个需要记录的数值的行号、列号、具体数值。实例五子棋游戏中,棋盘上的棋子除了落子的部分外,其他部分均为0,可以用稀疏数组表示该棋盘。在该游戏中需要实现以下功能:(1)暂停游戏保存棋盘数据;思路:将棋盘的棋子位置图从原始二维数据转化成稀疏数组保存到文件;(2)继续游戏,加载棋原创 2020-07-10 20:19:18 · 118 阅读 · 0 评论