![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaDS
小祈歌
想做一个勇往直前的人。
展开
-
链表基础操作——结构、头插、尾插、任意位置插入、findKey
链表:逻辑上有线性关系,物理存储不保证连续//结点{ 值,下一个结点的引用 }class Node{ public int value; //保存的是有效数据 public Node next; //下一个结点的线索(引用) Node(int v){ this.value = value; this.next = null; ...原创 2020-04-21 00:05:35 · 257 阅读 · 0 评论 -
Java数据结构经典排序算法系列博客目录
排序算法是整个数据结构中最为重要的几个部分之一,在此将Java数据结构经典算法系列的博客目录在此列出,方便大家查找与交流。1.《数据结构经典算法之一 直接插入排序的两种实现方法》2.《数据结构经典算法之二 希尔排序》3.《数据结构经典算法之三 直接选择排序的递归与非递归算法》 4.《数据结构经典算法之四 冒泡排序及其优化算法》 5.《数据结构经典算法之五 堆排序》6.《数据结构经典...原创 2019-05-15 21:53:23 · 161 阅读 · 0 评论 -
数据结构经典算法之七 归并排序
归并排序基本思想:分治算法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序(二路归并就是指将两个有序表合并成一个有序表)归并排序重要分以下三个部分:1. 把要排序的区间平均切分成两个部分2. 分治算法,对左右两个小区间进行同样方式的排序,直到size == 1(有序) && size == 0(没有数)3. 合并左右两个有序区间到一...原创 2019-05-15 21:32:53 · 224 阅读 · 0 评论 -
数据结构经典算法之六 快速排序及其三种分段算法
快速排序基本思想: 采用分治算法。选择一个基准值pivot,将这组元素分为三部分,比基准值小或相等的都位于基准值左边,基准值,比基准值大的都位于基准值右边,再继续对左右来两个小区间进行同样的处理快速排序主要分三部分:1. 选择一个基准值(可选择区间最右边的元素作为基准值)选取基准值的三个方法:随机法取边界值(最左边的值或最右边的值)三数取中法//实现基准值的三数取中法...原创 2019-05-15 21:18:42 · 1527 阅读 · 0 评论 -
数据结构经典算法之五 堆排序
堆排序基本思想:减治算法。通过堆来选择数据,其中排升序建大堆,排降序建小堆首先,在这里简单介绍一下二叉堆的概念:二叉堆在逻辑上可视为完全二叉树,在物理上可视为数组,本质上是对于任意一个结点,要求根的值 >=(针对大堆) 所有的子树结点的值,其基本作用是找最值堆排序主要分为以下三部分:1.向下调整前提:只有一个位置可能不满足堆的性质,其余位置都已经满足堆的性质1.判断要调整的...原创 2019-05-15 20:55:47 · 246 阅读 · 0 评论 -
数据结构经典算法之四 冒泡排序及其优化算法
冒泡排序基本思想:减治算法。根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动普通冒泡的基本算法:设置数组长度为N比较相邻两个数据大小,前 > 后,交换两个数从第0个数据遍历到第(N - 1)数,最大的数就沉到第(N - 1)个位置N = N - 1,如果 N != 0 , 重复 1.2-1....原创 2019-05-15 20:08:39 · 393 阅读 · 0 评论 -
数据结构经典算法之三 直接选择排序的递归与非递归算法
直接选择排序基本思想:减治算法。每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完每次选一个最大的数,放到无序部分的最后需要选n或n - 1次无序[0 , array.length - i)有序[array.length - i , array.length)在无序部分选最大的一个数,找出其下标把最大的数交换到无序区...原创 2019-05-15 18:47:58 · 398 阅读 · 0 评论 -
数据结构经典算法之二 希尔排序
2. 希尔排序基本思想:先选定一个整数,把待排序文件中所有记录分成个几组,并对每一组内的记录进行排序。然后重复上述分组和排序的工作。直到=1时,所有记录在统一组内排好序。分组插排:分组的个数从大到小,直到等于1最终插入排序预排序:gap > 1插排:gap == 1gap = array.lengthgap = gap / 3 + 1 或 gap = gap / 2...原创 2019-05-15 18:44:11 · 250 阅读 · 1 评论 -
数据结构经典算法之一 直接插入排序的两种实现方法
直接插入排序基本思想 : 减治算法。把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置并将arr...原创 2019-05-15 18:39:36 · 1769 阅读 · 0 评论 -
Java数据结构之栈和队列
栈相关概念栈是一种特殊的线性表只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。原则:后进先出LIFO(Last In First Out)压栈:栈的插入操作,入数据在栈顶出栈:栈的删除操作,出数据也在栈顶栈的实现一头进出栈一般可以使用数组或链表实现,数组结构更优class Stack{ int[] array...原创 2019-05-06 16:19:00 · 855 阅读 · 0 评论 -
数据结构面试题之环形链表,判断链表是否有环?求环的入口点
题目描述:判断一个链表中是否有环,有则找出环的入口节点leetcode面试题链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/description/题目分析:判断环形链表的可能情况有以下三种:基本思路:由题可以看出链表为单链表,利用快慢指针,我们可以设置两个指针结点(fast,slow),初始化都指向链表的头...原创 2019-04-15 15:41:01 · 734 阅读 · 6 评论 -
数据结构面试题之复制带有随机指针的复杂链表
题目描述:给定一个链表,每个结点包含一个额外增加的随机指针,该指针可以指向链表中的任何结点或空结点,要求返回这个链表的深拷贝leetcode面试题链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/description/题目示例:基本思路:遍历链表的所有结点,复制结点并且仅保留元素结构,将其插进链表...原创 2019-04-16 16:12:43 · 148 阅读 · 0 评论 -
数据结构链表面试题——判断两个链表是否交叉?求出交叉结点
/** * 两个单链表交叉 *(条条大路通罗马----尾结点) * * 1.判断链表是否发生了交叉 * 2.如果交叉找出是哪个结点交叉了 * 长的链表先走lengthlong-lengthshort步----保证循环初始两个链表长短相同 * 然后长短链表一起遍历,两个结点第一次相遇的即为结点 */public class IntersectionNode { pub...原创 2019-04-12 18:13:44 · 779 阅读 · 0 评论 -
数据结构之链表基础面试题小结
移除链表元素/** * 删除链表中等于给定值 val 的所有节点。 * * 示例: * * 输入: 1->2->6->3->4->5->6, val = 6 * 输出: 1->2->3->4->5 * * 基本思路:建立新链表,遍历筛选非val值尾插进新链表中 */public class RemoveEle ...原创 2019-04-12 17:53:36 · 273 阅读 · 0 评论 -
Java数据结构之顺序表与链表
线性表线性表是n个具有相同特性的数据元素的有限序列常见顺序表:顺序表、链表、栈、队列、字符串线性表在逻辑上是线性结构,也就说是连续的一条直线线性表在物理结构上并不一定是连续的线性表在物理上存储时,通常以数组和链式结构的形式存储。线性表:数据在逻辑上有前后关系顺序表顺序表:用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储顺序表的存储位置和逻辑关...原创 2019-04-08 20:42:12 · 296 阅读 · 0 评论 -
Java数据结构之时间复杂度、空间复杂度
时间复杂度概念:算法中的基本操作的执行次数常见复杂度:随着数据规模的变化,耗时的时长变化O(1)O(log(n)) 二分查找O(n) 递归函数,遍历查找O(n*log(n))O(n^2) 嵌套循环,冒泡排序O(2^n) 斐波那契递归/** * 遍历查找O(n) * 基本思想:将整个数组从头开始遍历,匹配要查找的元素 */private static int ...原创 2019-04-08 19:11:23 · 397 阅读 · 0 评论