数据结构
文章平均质量分 88
Living_Amethyst
每天都该保持前进
展开
-
【数据结构】二叉搜索树
目录概念二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除二叉搜索树的性能分析二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 第一大种情况、cur.left == null 我们以这一大种情况为例,画图解析,后面其它情况类推即可 第二大种情况、cur.right == null 第三大种情况、cur.left != null && cur.right != null (也是最难的一种情况) 我们以找右树的最小值为例,画图帮助理解 关于二叉搜索树的插入、查找、删除有关代码原创 2022-07-02 21:19:27 · 338 阅读 · 11 评论 -
【八大排序④】归并排序、不基于比较的排序(计数排序、基数排序、桶排序)
目录一、归并排序 二、计数排序三、基数排序 四、桶排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤: 代码(递归) 代码(非递归) 算法的步骤如下: 代码 【计数排序的特性总结】1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。2. 时间复杂度:原创 2022-07-01 16:37:51 · 531 阅读 · 6 评论 -
【八大排序③】快速排序(动图演绎Hoare法、挖坑法、前后指针法)
快速排序(Quick Sort)引言快速排序算法算法描述将区间按照基准值划分为左右两半部分的常见方式:1、Hoare版2、挖坑法3、前后指针法 快速排序的优化规模较小时的优化 三数取中法 非递归实现快速排序快速排序总结什么时候最快当输入的数据已经是正序时(都已经是正序了,我还需要你冒泡排序吗?)什么时候最慢当输入的数据是反序时(写一个 for 循环反序输出数据不就行了,干嘛要用你冒泡排序呢?)算法稳定性 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相......原创 2022-06-29 22:18:24 · 11417 阅读 · 13 评论 -
【八大排序②】选择排序(选择排序,堆排序)
目录 一、选择排序关于选择排序 算法步骤:代码实现 【直接选择排序的特性总结】 二、堆排序堆排序算法的基本思想 【直接选择排序的特性总结】选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。 【直接选择排序的特性总结】 之前我们已经介绍过了大根堆、小根堆的概念,而堆排序就是利用堆(排升序建大根堆,降序建小堆)进行排序的方法。如图,就是一个大根堆,90为最大值,将90与20(末尾元素)互换原创 2022-06-28 23:34:06 · 148 阅读 · 0 评论 -
【八大排序①】插入排序(直接插入排序、希尔排序)
关于排序,相信大家一定不陌生,在生活中我们见过许多排序,比如在购物网站搜索时,有根据价格排序、根据好评度排序、根据销量排序,我们根据关键字使内容具有一定的顺序,这便是排序。 排序主要为 基于比较的排序 和 不基于比较的排序 上图的7中排序都是基于比较的排序 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。 我们用一张图来领略一下直接插入排序算法的思想我们定义一个 i 和 j,将数组按升序排序原创 2022-06-28 21:50:05 · 491 阅读 · 2 评论 -
【数据结构】二叉树 (Binary Tree)
二叉树快速入门原创 2022-06-27 19:20:22 · 2233 阅读 · 7 评论 -
【数据结构】这些二叉树经典面试题帮你快速入门二叉树
二叉树入门到精通原创 2022-06-27 19:21:03 · 1732 阅读 · 7 评论 -
【数据结构】这些栈、队列的经典面试题你还不知道吗?
力扣在做这道题前,我们需要有 栈 的先驱知识,可以参考本人的这篇博客(41条消息) 【数据结构】栈_Living_Amethyst的博客-CSDN博客 分析:由于队列的特点是“先进先出”,而栈的特点是“后入先出”,所以用队列实现栈 仅用一个队列是不能实现的,需要两个队列我们的思路是:入的时候都入到不为空的队列里,出的时候就把不为空的队列里的除了要出的元素之外的其他(size-1)个元素都移到为空的队列里 二.用栈实现队列力扣 分析:和上一题类似,若要用栈实现队列,我们需要两个栈原创 2022-06-22 00:07:36 · 297 阅读 · 3 评论 -
【数据结构】队列(Queue)
轻松理解数据结构中的队列原创 2022-06-21 22:23:47 · 687 阅读 · 8 评论 -
【数据结构】栈
一.栈(stack)的基本概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈顶(Top):线性表允许进行插入和删除的一端。 栈底(Bottom):固定的,不允许进行插入和删除的另一端。 空栈:不含任何元素。如上图:a1为栈底元素,an为栈顶元素。由于栈只能在栈顶进行插入和删除操作,故进栈次序依次为a1,a2,... ,an 而出栈次序为an,...,a2,a1。栈的明显的操作特征为后进先出(Last In First Out,LIFO),故又称 后进先出的线性表。原创 2022-05-14 13:03:44 · 1005 阅读 · 2 评论 -
【数据结构】LinkedList与链表
【引言】上篇文章我们介绍了ArrayList的使用以及它的一些相关知识,还模拟实现了简单的顺序表 我们在这个过程中,有了以下的思考:ArrayList的底层是使用数组来存储元素的 这就导致当ArrayList的任意位置插入或删除元素时,就需要将后续元素整体向后移或者向前移,所以时间复杂度为O(N) 因此ArrayList不适合做任意位置插入和删除比较多的场景 所以,Java集合中又引入了LinkedList,即链表结构1.链表1.1链表的概念和结构 ......原创 2022-05-11 20:13:26 · 984 阅读 · 7 评论 -
【数据结构】必掌握的链表面试题
我们在学习了链表的有关知识后,有必要来看几个链表的经典面试题,让我们一起来学习一下吧1.删除链表中等于给定值 val 的所有节点力扣给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]这个删除的核心是:要找到需要删除的节点的上一个节点由于在一开始就处理头节点就需要......原创 2022-05-09 23:10:10 · 1322 阅读 · 8 评论 -
【数据结构】ArrayList和顺序表
1.线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是一种数据结构,一个线性表是n个具有相同特性的数据元素的有限序列。常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,...原创 2022-05-01 00:32:41 · 1496 阅读 · 7 评论