数据结构和算法
文章平均质量分 67
数据结构相关知识和算法知识
Java大数据运动猿
努力提升自己,记录学习过程。巩固自己,帮助他人!
展开
-
递归思路讲解
最近刷到了树这一模块的算法题,树相关的算法题几乎都是用递归来实现的,但递归的思路却有点抽象,每次遇到递归,都是通过递归来深度或广度地遍历树,但对于递归遍历树的遍历路线,却有点抽象难懂,不知道遍历的路线是怎么样的,也对于返回的路线有点懵懂。虽然知道是用递归,也知道递归可以一层一层从上到下地遍历,大体上的一个遍历路线是明白的,但是真要将递归一层层拆解分析的话,我还是有点不知所措的,所以今天研究了一小时,彻底将递归的一层层遍历拆解分析透彻了。记录一下拆解分析的过程,以防之后又忘了,方便回顾。原创 2023-05-02 14:26:27 · 828 阅读 · 0 评论 -
数据结构各结构特点(数组、链表、栈、队列、树)
一、数组简介:数组是一种线性表结构,元素序列有序,在内存中开辟一段连续的内存空间。数组具有随机访问的优势,可以通过下标访问元素,时间复杂度为O(1),但插入删除操作比较复杂,需要移动其他元素,所以时间复杂度为O(n)。特点:1.数组在逻辑上、内存中都是连续的,数组需要开辟一段连续的内存空间2.查找元素快:通过索引,可以快速访问指定位置的元素3.增删元素慢:因为数组长度是固定的,如果插入删除元素的话,就要涉及到元素的移动。原创 2023-04-18 12:56:21 · 1887 阅读 · 0 评论 -
平衡二叉树(AVL树)
1.AVL(二叉平衡树)主要是为了解决二叉查询树不平衡的情况下,导致查询效率低下的解决方案。2.AVL的主要规则:左子树和右子树的高度差不能超过1,如果超过1那么则进行左旋转或者右旋转来达到平衡的状态。3.具体的旋转规则如下:(1)左子树的高度 - 右子树的高度 > 1 如果:左子节点的右子树的高度 > 左子树的高度,那么左子节点先进行左旋转 将当前根节点进行右旋转(2)右子树的高度 - 左子树的高度 > 1 如果:右子节点的左子树的高度原创 2023-04-16 14:33:38 · 388 阅读 · 0 评论 -
二叉查找树
通过中序遍历,刚好可以把二叉查找树从小到大进行遍历输出。1.通过中序遍历就可以将二叉查找树进行顺序输出。2.中序遍历的特征:左、根、右。原创 2023-04-14 16:37:03 · 407 阅读 · 0 评论 -
二叉树概念及基本功能实现
二叉树是每个节点最多有两个子树的树结构,也就是说树的度是2.满二叉树:每一层的结点数都达到最大值。完全二叉树:若设二叉树的深度为k,除第k层外,其他各层(1~k-1)的结点数都达到最大个数,第k层所有的结点都连续集中在最左边,这就是完全二叉树。注:完全二叉树的话,所有的结点都连续集中在最左边,也就是如下图所示,右子节点可以没有,但如果右子节点有的话,则左子节点必须存在。下图中如果叶子结点只有4结点,5、6、7结点没有的话,也是完全二叉树。原创 2023-03-25 10:58:14 · 415 阅读 · 0 评论 -
树的基本概念
树的一些基本定义和概念原创 2023-03-25 09:14:35 · 96 阅读 · 0 评论 -
队列的基本操作
·队列(Queue)是一个先进先出(FIFO-First In First Out)的有序列表。·主要方法:入队(enqueue / offer)和 出队(的dequeue / poll)原创 2022-11-23 18:21:06 · 311 阅读 · 0 评论 -
栈的基本操作
·栈(stack)是一个先进后出(FILO-First In Last Out)的有序列表。·主要方法:入栈(push)、出栈(pop)·允许插入和删除的一端为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。·先放入到栈的元素在栈底,后放入栈的元素为栈顶。栈顶的元素先出,栈底的元素后出。原创 2022-11-23 14:42:46 · 727 阅读 · 0 评论 -
双链表的基本操作
一、双链表的设计二、双链表的实现和基本操作1.实现双链表节点以及设置first、last指针2.获取当前链表中元素的数量3.获取指定位置的节点4.在尾部添加结点元素5.在指定位置添加元素6.删除指定位置的结点原创 2022-11-15 14:52:31 · 323 阅读 · 0 评论 -
单链表的基本操作
链表的存储结构在逻辑上、概念上的连续结构,但在实际的物理存储上是非连续、非顺序的。它的存储单元以结点为单位,每一个结点由数据域和指针域两个域组成。数据域存储数据元素信息data,指针域存储直接后继存储位置next。整个链表的存取必须从头指针开始进行,头指针指链表中第一个结点(即第一个数据元素的存储映像,也称首元结点)的存储位置。同时,由于最后一个数据元素没有直接后继,则单链表中最后一个结点的指针为空(null)。头指针有两种情况:(1)为了方便处理,在单链表的第一个结点(首元结点)之前附原创 2022-11-12 12:28:51 · 1133 阅读 · 2 评论 -
算法的时间复杂度和空间复杂度
时间复杂度的定义:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),我们也称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。原创 2022-11-07 12:12:19 · 450 阅读 · 0 评论