数据结构
文章平均质量分 85
Li_yizYa
持之以恒
展开
-
排序算法复习 | 插入排序(直接插入排序、希尔排序)与选择排序(直接选择排序、堆排序)
排序算法,直接插入排序,希尔排序,直接选择排序、堆排序,排序算法详解,时间复杂度空间复杂度分析,以及是否为稳定的排序算法原创 2022-10-19 23:15:25 · 340 阅读 · 0 评论 -
你了解直接进行访问的数据结构吗?一篇文章带你了解简单的哈希表的实现
目录哈希表哈希表的实现初始化计算负载因子哈希表的扩容哈希表的插入查找元素完整代码测试用例哈希表实现代码已上传至gitee中:点击查看代码哈希表哈希表(也称散列表):是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问,以加快查找速度。这个映射函数叫做哈希函数,存放记录的数组叫哈希表.例如集合{1,7,8,9,4,6}哈希函数设置为:hash(key) = key % capacity...原创 2022-04-11 22:50:43 · 626 阅读 · 2 评论 -
Java实现二叉查找树及其相关操作
目录二叉查找树初始化二叉查找树的查找二叉查找树的插入二叉查找树的删除二叉查找树的中序遍历findMax and findMin二叉查找树完整代码测试用例完整代码已上传至gitee中:gitee代码仓库二叉查找树二叉查找树,又称二叉排序树,亦称二叉搜索树,是数据结构中的一类。在一般情况下,查找效率比链表结构要高。二叉查找树的定义:一棵空树或具有如下性质的树:①若左子树不为空,则左子树上所有结点的值小于根结点的值;②若右子树不...原创 2022-04-10 23:03:08 · 1707 阅读 · 0 评论 -
优化后的快速排序(详解)
目录快速排序三数取中值分割法获得枢纽元快速排序的主例程直接插入排序代码快速排序完整代码快速排序快速排序是实践中的一种快速的排序算法,它的平均运行时间是O(N log N),该算法之所以特别快,是因为它有非常精炼和高度优化的内部循环。可以将快速排序和直接插入排序结合起来得到优化后的快速排序,当数据量较小时,如果继续利用快速排序对其进行排序操作,其效率比较低下,因为快速排序是递归的,因此当遇到很小的数组(N<=20)时,采用直接排序对其进行排序.三数取中值分..原创 2022-04-08 23:29:50 · 1025 阅读 · 3 评论 -
数据结构——七大经典排序算法
目录排序的概念插入排序直接插入排序希尔排序(缩小增量的排序)选择排序直接选择排序堆排序交换排序冒泡排序快速排序归并排序对于排序算法的总结所有的排序算法均已上传至码云(Gitee)中,可以点击查看:七大经典排序算法代码排序的概念排序即使一串记录,按照其中某个或某些关键字的大小,递增或者递减的排列起来。排序分为内部排序和外部排序,内部排序即将数据元素全部放在内存中的排序,外部排序即当数据元素过多不能同时放在内存中排序时,根据排序的要求...原创 2022-04-02 23:54:46 · 6651 阅读 · 16 评论 -
二叉树的前序遍历、中序遍历、后序遍历(递归+非递归实现)
目录前序遍历递归实现非递归实现中序遍历递归实现递归实现后序遍历递归实现非递归实现二叉树是一种非常经典的数据结构,它的应用途径十分广泛,但同时它也是一种简单的、易理解的数据结构,解决二叉树问题的核心思想是递归,在初次接触到二叉树这种数据结构时,它的递归方式遍历很容易理解,但当要求以非递归方式来实现遍历时,就显得手足无措了,本篇博客以递归和非递归两种方式实现二叉树的遍历.前序遍历前序遍历的顺序为:首先访问根结点,然后遍历左子树,最...原创 2022-04-01 23:52:20 · 5235 阅读 · 0 评论 -
Java~大根堆的创建以及实现堆的插入删除操作
目录堆的概念以及问题思考初始化堆并将其调整为大根堆初始化堆调整堆为大根堆大根堆的插入和删除大根堆的插入大根堆的删除完整代码堆的概念以及问题思考堆的概念:如果有关键字集合k = {k0,k1,k2,......,k(n-1)},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,且满足Ki <= K2i+1 且Ki <= K2i+2(或Ki >= K2i+1 且Ki >= K2i+2)i = 0,1,2.....,则称为小...原创 2022-03-25 17:04:30 · 6098 阅读 · 2 评论 -
Java~两种方案设计一个有getMin功能的栈
题目实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作.要求 1.pop、push、getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构.解题思路 在解决问题时,两种方案其实都是利用两个栈来实现,一个栈用来保存当前栈中的元素,其功能是一个正常的栈,将这个栈称为stackData;另一个栈用来保存每一步的最小值,这个栈称为stackMin。具体实现方式有两种.两种方案的其他方法均相同,只是压入数据和出栈的规则不同.目录初原创 2022-03-23 23:11:33 · 1085 阅读 · 4 评论 -
二叉树经典练习题合集(Java实现)
二叉树的问题大多是以递归思想求解,也可以利用迭代思想利用队列实现,熟练运用递归对于解决二叉树问题十分重要,本篇博客为一些基础的二叉树问题,对于理解二叉树的结构以及递归思想有着很大的帮助.本篇文章所有的代码已上传至gitee中:二叉树OJ练习目录树的重要概念总结相同的树另一颗树的子树二叉树的最大深度平衡二叉树对称二叉树迭代实现(利用队列实现)递归实现二叉树的层次遍历树的重要概念总结①结点的度:一个结点含有子树的个数称为该结点的度;②树...原创 2022-03-22 21:09:22 · 1870 阅读 · 2 评论 -
Java~栈与队列的应用(利用栈实现队列、利用队列是实现栈)
在学习完栈和队列后,栈的特征是先进后出,队列的特征是先进先出,因此可以利用该性质,利用两个栈实现队列的操作,利用两个队列实现栈的操作。目录利用栈实现队列初始化入队列判断队列是否为空弹出队头元素获取队头元素栈实现队列完整代码利用队列实现栈初始化判断栈是否为空入栈操作出栈操作获取栈顶元素队列实现栈完整代码利用栈实现队列队列的定义:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先...原创 2022-03-20 17:48:43 · 1129 阅读 · 10 评论 -
Java实现二叉树及其常规操作
😊使用Java实现一个二叉树。二叉树是一个递归的数据结构,每个节点最多有两个子节点,且有左右之分,分别称为该节点的左右孩子。二叉树是树形结构的一个重要类型,许多实际问题抽象出来的数据结构往往是二叉树形式,因此二叉树显得特别重要,但它的存储结构和算法都较为简单。二叉树结构以及代码实现很容易,但一定要注意理解递归思想,只要可以很好地理解递归思想,解决二叉树相关问题难度就降低很多了,大家可以参考我博客的内容自己手敲一边代码实现二叉树,收获一定会很大,一起加油😊😊😊目录模拟实现二叉树.原创 2022-03-19 22:21:17 · 3397 阅读 · 3 评论 -
链表经典练习题合集2(Java版)
本篇主要为leetcode上链表部分中等及困难难度练习题,链表部分的习题画图十分重要,只要链表结构画出来,再写代码解决问题就容易很多。做完这些难度高的习题后发现,其实中等难度的习题只是将两个甚至三个以上的知识点融汇到一个题目中,当掌握链表的基本处理方法后,并用心去钻研,解决这些习题其实也不是想象中的那么难.本篇中的例题代码均已更新在gitee代码仓库中,仓库链接:gitee代码仓库希望我的解决思路可以给大家带来帮助,也希望大家可以指出我思路或者逻辑上的不足☺☺目录两数相加删除链表.原创 2022-03-18 23:25:34 · 1339 阅读 · 1 评论 -
Java实现双向链表及其常规操作
数据结构链表的学习结束了,我已经将重要的三种链表的简单实现整理并发布在了博客上,希望我的文章可以给有需要的朋友们带来帮助,也希望大家可以指出我存在的问题,共同进步,2022年冲刺大厂☺☺(* ̄︶ ̄)顺序表的简单实现:顺序表的简单实现单链表的简单实现:单链表的简单实现双向链表的定义双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表任意一个结点开始,都可以很方便的访问它的前驱结点和后继结点。简易的双向链表模型 目.原创 2022-03-16 19:03:12 · 2840 阅读 · 18 评论 -
Java实现单链表及其基本操作
目录什么是单链表?带头结点的单链表不带头结点的单链表模拟实现不带头结点的单链表定义结点类初始化头插法创建单链表尾插法创建单链表打印单链表单链表的查找获取单链表的长度按位置寻找前驱结点单链表的插入修改指定位置的值按值寻找前驱结点删除第一次出现的key值删除所有的key值清空单链表完整代码什么是单链表?单链表是一种链式存取的数据结构,用一组任意的存储单元存放线性表中的数据元素。链表中的数据是以结点表示...原创 2022-03-14 13:32:36 · 8368 阅读 · 16 评论 -
Java实现顺序表及其常规操作
目录模拟实现简单的ArrayList初始化打印顺序表判断顺序表是是否已满增加元素指定位置插入元素判断是否包含某个元素按值查找元素获取对应位置的元素修改指定位置的值删除元素获取顺序表的长度清空顺序表完整代码什么是顺序表?顺序表是指在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.了解ArrayList类在Java中,ArrayList是一个普通的类,实现了List...原创 2022-03-13 17:17:11 · 3755 阅读 · 2 评论 -
Java~时间复杂度和空间复杂度详解
目录算法效率时间复杂度常见时间复杂度计算举例空间复杂度常见空间复杂度计算举例算法效率如何去衡量一个算法的好坏?通常我们从时间效率和空间效率两个方面去分析算法的好坏。时间效率即时间复杂度,空间效率被称为空间复杂度。时间复杂度主要是衡量一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。常见的复杂度大小比较:O(N^2) > O(N*logN) >O(N) > O(logN) > O(1)时间复杂度定义:在计算机科学中,..原创 2022-03-12 22:36:49 · 2402 阅读 · 1 评论