![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 77
数据结构
Dream_Snowar
这个作者很懒,什么都没留下…
展开
-
[C++进阶&数据结构]二叉搜索树
对于二叉树的结点,我们类似于list的结点定义一样,使用一个struct类。原创 2024-08-07 10:53:46 · 659 阅读 · 0 评论 -
[数据结构]排序
本篇主要是对常见排序的分类和一些排序的详解。原创 2024-04-01 21:53:07 · 1027 阅读 · 2 评论 -
[数据结构]oj二叉树的几道选择题
如果这棵树每一层都是满的,则它的深度最小,假设它为一个四叉树,高度为h,则这个数的节点个数为(4^h - 1) / 3,当h = 5, 最大节点数为341, 当h = 6, 最大节点数为1365,所以最小深度应该为6。由后序遍历确定子树的根,后序遍历从后向前看,最后一个元素为根,和前序遍历刚好相反,从后向前看后序遍历,应该是根,右,左,根据中序遍历确定子树的左右区间。通过前序遍历找到子树的根,在中序遍历中找到根的位置,然后确定根左右子树的区间,即根的左侧为左子树中所有节点,根的右侧为右子树中所有节点。原创 2024-03-31 22:19:17 · 773 阅读 · 0 评论 -
[数据结构]插入和希尔排序
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。原创 2024-03-28 22:54:24 · 1059 阅读 · 3 评论 -
[数据结构]二叉树的层序遍历
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。原创 2024-03-25 19:51:54 · 432 阅读 · 4 评论 -
[数据结构]二叉树与递归OJ
上回我们手撕了一棵二叉树,并且通过递归完成了遍历,这回我们将深入理解用递归解决相关的二叉树问题,数量使用分治的思想.原创 2024-03-24 20:37:22 · 705 阅读 · 4 评论 -
[数据结构]二叉树的建立与遍历(递归)
首先我们拥有如下二叉树:要了解二叉树遍历,我们得先了解二叉树的三种遍历方式:前序遍历,中序遍历,后序遍历。原创 2024-03-24 19:27:08 · 623 阅读 · 0 评论 -
[堆的数据结构oj]找出一大堆数据中最大的前十个数
之后遍历10亿个数,把每个数与堆顶比较。遍历结束后,堆里面的就是最大的10个数。首先我们知道100亿个数char类型需要越40G的空间,如果我们通过排序来看,我们不难发现需要大量的时间。如果我们直接用堆排序,我们的速度就是N*logN所以我们的这种新方法效率明显高于堆排序。这道题是找N个数中最大的K个数,我们这个算法可以把效率提高到K+(N-K)*logK。这里我们来实验一下,先造10亿个数,然后找最大的前10个。1.我们可以建立一个堆存放10个数字,做小堆.如何在100亿个数据中找出最大的前10个数。原创 2024-03-23 20:34:52 · 221 阅读 · 0 评论 -
[数据结构]二叉树(下)
我们可以假设二叉树有N个节点,深度为h我们可以恒容易得到满二叉树每行的节点数,然后错位相减,算出节点与高度的关系。原创 2024-03-23 19:58:27 · 414 阅读 · 0 评论 -
[数据结构]堆
堆是一种完全二叉树的定义:完全二叉树的形式是指除了最后一层之外,其他所有层的结点都是满的,而最后一层的所有结点都靠左边。,从左到右连续。教材上定义如下:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。原创 2024-03-18 12:32:11 · 1030 阅读 · 0 评论 -
[数据结构]二叉树(上)
对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。但是我们发现这样子有个很大的问题,我们发现是不是有很多的空间开辟了确没有存放数据,造成了空间的浪费,如果缺的数据多的话,会造成大量的空间浪费。概念:一棵二叉树是结点的一个有限集合,由一个根节点加上两棵别称为左子树和右子树的二叉树组成(可以为空)。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。:一个节点含有的子树的根节点称为该节点的子节点;原创 2024-03-14 20:13:56 · 790 阅读 · 6 评论 -
[数据结构]OJ用队列实现栈
官方题解:https://leetcode.cn/problems/implement-stack-using-queues/solutions/432204/yong-dui-lie-shi-xian-zhan-by-leetcode-solution/首先我们要知道栈是一种后进先出的数据结构,元素从顶端入栈,然后从顶端出栈。队列是一种先进先出的数据结构,元素从后端入队,然后从前端出队。原创 2024-03-07 22:07:38 · 717 阅读 · 4 评论 -
[数据结构]OJ一道------用栈实现队列
每次 pop 或 peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。然后我们可以遍历IN栈,然后把存储的内容压入OUT栈,我们知道栈只能头插,所以我们在这些操作后会发现OUT栈和IN栈中数据的顺序颠倒了。然后是判断队列是否为空,这里我们可以直接判断两个栈是否是空的如果都是空的,则队列也是空的.因为我们知道队列只能头删,而OUT现在正好是颠倒的栈,对其尾删其实就是对输入的数进行头删。我们可以先创建栈,以及其相应的功能。原创 2024-03-05 20:40:58 · 485 阅读 · 7 评论 -
[数据结构]队列
只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有:进行插入操作的一端称为:进行删除操作的一端称为。原创 2024-03-05 19:29:54 · 347 阅读 · 2 评论 -
栈的OJ一小道-->Leetcode有效的括号
所以我们可以这样想,创建一个栈,当我们获得一个左括号时,我们将其放入栈,然后等出现右括号时,与左括号比较,如果不匹配就返回false,匹配就将这个符号出栈.反正我们只要记住,这道题我们乍一看可能会选择暴力遍历法,但这题我们可以选择栈,这样可以大大降低我们的时间复杂度.这题要求非常简单。如果检测到左括号则返回相应右括号,这样之后我们只需要让出现的右括号和栈顶的右括号比较就可以知道是否匹配了.那么我们就可以尝试实现代码了,但其实有一种情况,我们不需要遍历就能知道括号不匹配,那么是什么情况呢?原创 2024-03-04 19:20:39 · 384 阅读 · 0 评论 -
[数据结构]栈
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。:栈的删除操作叫做出栈。出数据也在栈顶。此图来源与网络这里我们可以比作肉串,我们先把肉串好,后串上的肉,是先吃的.原创 2024-03-03 20:10:27 · 511 阅读 · 0 评论 -
[数据结构]链表OJ--环形链表判断是否有环(快慢指针法)
当慢指针和快指针从链表上的同一个节点开始移动时,如果该链表中没有环,那么快指针将一直处于慢指针的前方;等到慢指针进入环时,由于快指针的速度快,它一定会在某个时刻与慢指针相遇,即套了慢指针若干圈。我们想可以考虑给的链表为空的情况,而且我们观察例子,我们可以看出存在只有一个头的没有下一个节点的链表,所以我门要对这两种情况进行判断。然后我们让指针跑起来如果最后有一个指针跑到NULL说明,这个链表没有环,如果快慢指针不相等就接着跑,知道两个指针相遇.说明有环。它默认给我们创建了一个链表,给了这个链表的表头的地址。原创 2024-03-03 19:13:20 · 343 阅读 · 0 评论 -
【数据结构】链表的分类和双向链表
本篇是基于上篇单链表所作,推荐与上篇配合阅读,效果更加。原创 2024-01-24 21:54:45 · 1380 阅读 · 2 评论 -
【数据结构】单链表
1. 链表的概念及结构上回我们一起学习了线性表中的顺序表,今天我们将一起来学链表中的单链表。1. 链表的概念及结构概念:链表是⼀种的存储结构,数据元素的是。链表的结构跟火车车厢相似,淡季时车次的车厢会相应减少,旺季时车次的车厢会额外增加几节。只需要将火车的某节车厢去掉/加上,不会影响其他车厢,每节车厢都是独立存在的,且每节车厢都有车门,你只能再火车上移动,车厢是独立存在的,只能从所以前面的车厢一节一节的往后走,从这节车尾到下节车头。在链表里,每节“车厢”是什么样的呢?原创 2024-01-23 20:07:24 · 973 阅读 · 0 评论 -
[数据结构]顺序表
1、顺序表的概念及结构1、顺序表的概念及结构1.1 线性表线性表()是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。案例:蔬菜分为绿叶类、⽠类、菌菇类。线性表指的是具有部分相同特性的⼀类数据结构的集合2、顺序表分类2.1顺序表和数组的区别。原创 2024-01-22 20:33:19 · 1218 阅读 · 1 评论 -
时间复杂度和空间复杂度
这里我们默认CPU的每个单元运行消耗的时间都是相同的。随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称,记为O是什么呢?算法导论是这么写的:大O用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。那么我们怎么算呢?实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要1、用常数1取代运行时间中的所有加法常数。2、在修改后的运行次数函数中,只保留最高阶项。3、如果最高阶项存在且不是1。原创 2024-02-06 09:09:10 · 609 阅读 · 0 评论