数据结构
文章平均质量分 82
数据结构相关的知识
小赵小赵福星高照~
这个作者很懒,什么都没留下…
展开
-
数据结构之红黑树
红黑树文章目录红黑树红黑树的概念红黑树的性质红黑树节点的定义红黑树的插入情况操作红黑树的插入代码红黑树测试代码红黑树整体代码本篇博文只讲解了红黑树的插入操作,下面我们来了解一下什么是红黑树。红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。NIL是空结点,这里显示出来是为了表示路径红黑树和AVLTree不同点:原创 2022-03-18 16:05:24 · 556 阅读 · 0 评论 -
数据结构之二叉搜索树详解
二叉搜索树文章目录二叉搜索树二叉搜索树概念二叉搜索树的操作二叉搜索树的节点结构二叉搜索树的结构二叉搜索树的查找二叉搜索树的插入二叉搜索树的遍历二叉搜索树的删除二叉搜索树插入的递归写法二叉搜索树查找的递归写法二叉搜索树删除的递归写法二叉搜索树增删查改操作代码二叉搜索树的应用Key搜索场景KV搜索场景(key-value)二叉搜索树概念二叉搜索树的操作二叉搜索树的节点结构二叉搜索树的结构二叉搜索树的查找二叉搜索树的插入二叉搜索树的遍历二叉搜索树的删除二叉搜索树插入的递归写法二叉搜索树查找的递归写法二叉搜索树删原创 2022-03-05 19:01:50 · 695 阅读 · 0 评论 -
数据结构之八大排序算法(C语言实现)
排序文章目录排序排序的概念及其应用排序的概念排序的定义排序的稳定性排序在现实生活中的应用常见的排序算法常见排序算法的实现直接插入排序希尔排序选择排序堆排序冒泡排序冒泡排序的优化快速排序Hoare法快速排序时间复杂度快速排序的优化挖坑法前后指针法快速排序非递归归并排序归并排序非递归实现计数排序常见排序算法的性能总结常见排序算法的时间复杂度、空间复杂度、稳定性各类排序算法的稳定性分析稳定性的意义排序的概念及其应用排序的概念排序的定义数据结构必学的结构之一,在现实生活中应用多,所谓排序,就是使一串记录原创 2021-09-21 14:33:25 · 1755 阅读 · 9 评论 -
数据结构之二叉树基础OJ练习另一颗树的子树
另一颗树的子树题目来源:另一颗树的子树题目描述:给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4原创 2021-09-20 11:08:41 · 350 阅读 · 0 评论 -
数据结构之二叉树的基础OJ练习二叉树的遍历
二叉树的前序遍历题目来源:二叉树的前序遍历题目描述:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]解题思路:规则是若二叉树为空,则空操作返回,否则先原创 2021-09-20 10:50:22 · 544 阅读 · 0 评论 -
数据结构之二叉树基础OJ练习对称二叉树
对称二叉树题目来源:对称二叉树题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \2 2 \ \ 3 3解题思路:判断一个二叉树是不是镜像对称,也是需要用到分治的思想,判断一颗二叉树是否对称,相当于判断它的左右子树是不是镜像对称,判断两个左原创 2021-09-19 21:09:26 · 231 阅读 · 0 评论 -
数据结构之二叉树基础OJ练习检查两颗树是否相同
检查两颗树是否相同题目来源:检查两颗树是否相同题目描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false解题思路:二叉树的好多问题原创 2021-09-19 20:42:08 · 459 阅读 · 0 评论 -
数据结构之二叉树基础OJ练习单值二叉树
单值二叉树题目来源:单值二叉树题目描述:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false解题思路:==具有传递性,比如:a==b && a==c,b==e && b==f,可以得到a==b==c==e==f该题的思路是比较一个父亲和左右原创 2021-09-19 11:35:00 · 222 阅读 · 0 评论 -
数据结构之二叉树的实现
二叉树的实现文章目录二叉树的实现二叉链表结构:建立节点之间的关系二叉树的遍历前序遍历中序遍历后序遍历层序遍历节点个数以及高度二叉树结点个数二叉树叶子节点个数二叉树第k层节点个数二叉树的深度二叉树查找值为x的节点二叉树的创建和销毁二叉树的创建二叉树销毁判断二叉树是否是完全二叉树二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三原创 2021-09-16 08:43:53 · 304 阅读 · 0 评论 -
数据结构之堆的应用—TopK问题
TopK问题Top-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。这里我们讲解三种方法:文章目录TopK问题方法一:排序方法二:将N个数建堆,取出前K个方法三:建一个K个数的堆(最优)方法一:排序思路:将所有数据进行排序,取前K个元素即可void swap(int *p1,int *p2){ int temp=*p1; *p1=*p2; *p2=temp;}void AdjustDown(int *a,int n,int原创 2021-09-04 22:21:00 · 364 阅读 · 0 评论 -
数据结构之堆的相关知识详解
堆文章目录堆堆的概念及结构堆的实现堆向下调整算法堆向上调整算法堆的创建建堆的时间复杂度堆的结构堆的构建堆的销毁堆的插入堆的删除取堆顶的数据堆的数据个数堆的判空堆的打印堆的应用堆排序堆的概念及结构用数组存储表示的完全二叉树小根堆:树中所有父亲都小于等于孩子,根是最小值大根堆:树中所有父亲都大于等于孩子,根是最大值堆的性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。堆的实现堆向下调整算法我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根原创 2021-09-04 11:14:06 · 463 阅读 · 1 评论 -
数据结构之树以及二叉树的相关概念
树文章目录树树的基本概念树的相关术语树的表示树在实际中的应用(表示文件系统的目录树结构)二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构二叉树的顺序结构树的基本概念树是一种非线性的数据结构,它是一种一对多的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm原创 2021-09-03 21:00:52 · 1404 阅读 · 5 评论 -
暑假第六天之每天一些题系列
暑假第六天之每天一些题系列一、选择题 以下程序的运行结果是int fun(int a,int b){ if(a>b) return(a+b); else return(a-b);}int main(){ int x = 3, y = 8, z = 6, r; r = fun (fun(x,y), 2 * z); printf(“%d\n”,r); return 0;}A. -48 B. 58 C. -58 D.原创 2021-08-17 21:52:35 · 355 阅读 · 0 评论 -
暑假第五天之每天一些题系列
暑假第五天之每天一些题系列一、选择题 如下程序:int a[10];int*pa;pa = a;则元素a[1]的地址可以表示为A. pa+1 B. pa+2 C. pa+4 D. a+2答案解析:数字名a是首元素的地址,pa存放的是首元素的地址,pa+1是第二个元素的地址,即a[1]的地址可以表示为pa+1 如下程序结果运行结果是int Change(int *pX){ int y = 8; y = y - *pX; pX = &y;原创 2021-08-17 20:53:42 · 523 阅读 · 0 评论 -
数据结构之超硬核热门复杂度、数组、链表OJ题2W+文字+图片详解
OJ题文章目录OJ题复杂度的OJ练习1.消失的数字2.旋转数组数组的相关OJ题1.移除元素2.删除有序数组中的重复值3.合并两个有序数组链表OJ题1.移除链表元素2.反转链表3.查找一个链表的中间结点4.链表中倒数第k个结点5.合并两个有序链表6.链表分割7.链表的回文结构8.链表的相交9.环形链表10.环形链表Ⅱ11.复制带随机指针的链表首先我们先了解一下OJ题的形式,形式有两种: 接口型提供一个接口函数,而不是完整程序,实现这个函数就可以了,提交程序以后,这段代码被提交到OJ服务器上,它原创 2021-08-12 18:48:22 · 1283 阅读 · 12 评论 -
数据结构之队列的基本操作以及栈和队列的OJ题画图详解
队列文章目录队列队列的概念队列的实现文件的创建队列结构的定义队列初始化队列的销毁队列的打印队列的插入队列的删除队列的大小取队头元素取队尾元素判断是否是空队列源代码栈和队列的OJ题用队列实现栈设计循环队列两个栈实现队列队列的概念只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 的特性入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头先进先出典型应用 队列实际中要保证公平排队原创 2021-08-11 16:55:33 · 1118 阅读 · 3 评论 -
数据结构之栈以及栈的基本操作
栈文章目录栈前言进栈出栈的变化形式栈的实现栈的顺序存储结构:栈的链式存储结构:文件的创建栈结构的定义栈的初始化入栈出栈获取栈顶元素获取栈中有效元素个数检测栈是否为空销毁栈括号匹配问题前言栈是限定仅仅在表尾进行插入和删除操作的线性表。在软件中,栈的这种后进先出数据结构的应用是非常普遍的。比如我们在使用浏览器时,浏览器都有一个“后退键”,你点击后可以按照访问顺序的逆序加载浏览过的网页。很多类似的软件,比如Word、Photoshop等文档或图像编辑软件中,都有撤销的操作,也是用栈这种方式来实现的。原创 2021-08-09 16:39:52 · 2961 阅读 · 0 评论 -
数据结构之顺序表和链表的区别
顺序表和链表的区别 存储空间上顺序存储结构用一段连续的存储单元依次存储线性表的数据元素,物理上连续链式存储结构用一组任意的存储单元存放线性表的元素,逻辑上连续,但物理上不一定连续(逻辑上就是我们想象出来的,看着它是链式的,好像是连续的) 随机访问性能顺序存储结构随机访问一个元素可以用下标的方式直接访问,时间复杂度为O(1)链式存储结构随机访问一个元素,需要从头到尾遍历,时间复杂度为O(N) 任意位置插入或者删除元素顺序存储结构可能需要搬移元素,效率较低,时间复杂度为O原创 2021-08-09 16:15:57 · 2581 阅读 · 0 评论 -
数据结构之带头结点的循环双向链表详细图片+文字讲解
双向循环链表文章目录双向循环链表前言文件的创建双向链表结构的定义创建返回链表的头结点值传递时:地址传递:双向链表的销毁双向链表的打印开辟一个新结点双向链表的尾插双向链表的头插双向链表的尾删双向链表的头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的结点源代码List.h(双向链表结构及其函数的声明)List.c(双向链表函数的实现)test.c(双向链表函数功能的测试)前言在开始讲解带头双向循环链表之前,我们先来看一个带哨兵位的头结点的单链表和不带哨兵位的头结点的单链表的区别:原创 2021-08-08 21:10:07 · 3650 阅读 · 0 评论 -
数据结构之单链表的增删查改等操作画图详解
单链表文章目录单链表链表的概念及其结构概念结构链表的实现开辟一个新结点链表的销毁打印链表单链表的尾插单链表的头插单链表的头删单链表的尾删找到单链表中的一个结点在pos位置后插入结点在pos位置前插入一个结点pos位置后删除结点pos位置删除结点返回链表大小判断链表是否为空源代码SList.h(单链表结构及其函数的声明)SList.c(单链表函数的实现)test.c(单链表功能的测试)为什么有了顺序表,还需要有链表这样的数据结构呢?顺序表存在的问题: 中间或者头部插入删除,需要挪动数据时间复杂度为原创 2021-08-05 15:27:14 · 2433 阅读 · 2 评论 -
数据结构之顺序表的增删查改等操作详解
顺序表的增删查改文章目录顺序表的增删查改顺序表静态顺序表:使用定长数组存储元素动态顺序表:使用动态开辟的数组存储顺序表的初始化顺序表的销毁打印顺序表数据顺序表尾插数据顺序表头插数据顺序表头删数据顺序表指定位置插入元素指定位置元素删除返回顺序表总数据的个数修改数据三个文件的源代码:SeqList.h(头文件的包含以及顺序表结构以及函数的声明)SeqList.c(顺序表操作函数的定义)test.c(顺序表操作的测试)顺序表一段物理地址连续的存储单元依次存储数据元素的线性结构,其实就是数组,要求存储的数原创 2021-08-03 16:07:47 · 2115 阅读 · 7 评论 -
数据结构之时间复杂度与空间复杂度
数据结构数据结构中有简单存储数据的存储结构,比如顺序表、链表、串。不仅仅要存储数据、存起来还要查找数据,比如搜索树、哈希表等等这样结构。在写通讯录中,存储联系人信息我们可以用顺序表(数组)存储或者链表。文章目录数据结构什么是数据结构?什么是算法?如何学好数据结构呢?时间复杂度和空间复杂度算法效率时间复杂度大O渐进表示法(估算)空间复杂度什么是数据结构?数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。什么是算法?算法原创 2021-08-02 09:00:34 · 815 阅读 · 2 评论