初阶数据结构题目
这是写初阶数据结构一些题目的专栏,里面一些题目早在“初阶数据结构”这个专栏里面的文章内附带了。
流星白龙
https://gitee.com/yudukai(Gitee链接)
展开
-
【初阶数据结构题目】40. 计数排序
如果把负数变成正数,取绝对值呢?因为正负数绝对值一样的情况下无法区分正负数。时,效率很高,但是适用范围及场景有限。而且只能适用于整数排序,无法对小数排序。计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。那如果我们把负数统一加一个正数,让他变成整数呢?就是原来的元素,这些元素和下标形成了映射关系。根据统计的结果将序列回收到原来的序列中。定义一个i来遍历,i表示数组内元素。利用原数组中最大的值来确定。的位置,里面没有数据,不打印。的位置中,这个位置元素为。新数组的大小怎么确定?创建数组,数组大小为。原创 2024-08-23 01:44:11 · 425 阅读 · 2 评论 -
【初阶数据结构题目】39. 归并排序
的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(然后可以继续像上面这样分,直到全部分成一个一个的数据。递归的话也是递归到这个时候结束,然后往上返回。这两个数字组成的数组,我们怎么把他排序成。原创 2024-08-23 01:43:10 · 426 阅读 · 1 评论 -
【初阶数据结构题目】38. 快速排序-非递归版本
非递归版本的快速排序需要借助数据结构:栈。通过一轮快速排序后,接下来要排序的数是。经过一轮快速排序后,找到的基准值是。入栈,然后把右区间的。入栈,然后把左区间的。入栈,然后把右区间的。原创 2024-08-22 00:09:34 · 436 阅读 · 2 评论 -
【初阶数据结构题目】37. lomuto前后指针
创建前后指针,从左往右找比基准值小的进行交换,使得小的都排在基准值的左边。原创 2024-08-22 00:08:53 · 347 阅读 · 0 评论 -
【初阶数据结构题目】36.快速排序-挖坑法
首先从右向左找出比基准小的数据,找到后立即放入左边坑中,当前位置变为新的坑,然后从左向右找出比基准大的数据,找到后立即放入右边坑中,当前位置变为新的坑,结束循环后将最开始存储的分界值放入当前的坑中,返回当前坑下标(即分界值下标)当然这里会有一点小问题的。比如数据是升序的时候,基准值找起来会有点问题。但因为这里是初阶数据结构,所以先不讨论基准值。后面的高阶数据结构里面会讲。原创 2024-08-21 00:59:42 · 267 阅读 · 0 评论 -
【初阶数据结构题目】35. 快速排序-hoare版本
相等的值参与交换确实有一些额外消耗。实际还有各种复杂的场景,假设数组中的数据大量重复时,无法进行有效的分割排序。从左向右找出比基准值大的数据,左右指针数据交换,进入下次循环。从右向左找出比基准值小的数据,左右指针数据交换,进入下次循环。从右向左找出比基准值小的数据,左右指针数据交换,进入下次循环。从右向左找出比基准值小的数据,从左向右找出比基准值大的数据,从左向右找出比基准值大的数据,问题1:为什么跳出循环后。此时指向的数据一定不大于。指向的数据7变成数据3,指向的数据3变成数据7。扫描过的数据均不大于。原创 2024-08-20 00:17:18 · 217 阅读 · 0 评论 -
【初阶数据结构题目】34. 冒泡排序
前面在算法题中我们已经接触过冒泡排序的思路了,冒泡排序是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。空间复杂度:O(1)原创 2024-08-19 00:13:35 · 386 阅读 · 0 评论 -
【初阶数据结构题目】33. 直接选择排序
【代码】【初阶数据结构题目】33. 直接选择排序。原创 2024-08-19 00:13:01 · 322 阅读 · 0 评论 -
【初阶数据结构题目】32. 希尔排序
的取值很多,导致很难去计算,因此很多书中给出的希尔排序的时间复杂度都不固定。它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的。),把待排序文件所有记录分成各组,所有的距离相等的记录分在同一组内,并对每一组内的记录进行排序,然后。,即前一阶段排序次数是逐渐上升的状态,当到达某一顶点时,排序次数逐渐下降至。,而该顶点的计算暂时无法给出具体的计算过程。时,数组已经接近有序的了,直接插入排序。因此,希尔排序在最初和最后的排序的次数都为。希尔排序是对直接插入排序的优化。原创 2024-08-17 00:05:57 · 523 阅读 · 0 评论 -
【初阶数据结构题目】31. 直接插入排序
的排序码顺序进行比较,找到插入位置即将。插入,原来位置上的元素顺序后移。直接插入排序的特性总结。原创 2024-08-17 00:04:54 · 232 阅读 · 0 评论 -
【初阶数据结构题目】30. 二叉树的构建及遍历
【代码】【初阶数据结构题目】30. 二叉树的构建及遍历。原创 2024-08-16 23:42:25 · 333 阅读 · 0 评论 -
【初阶数据结构题目】29. 二叉树遍历
【代码】【初阶数据结构题目】29. 二叉树遍历。原创 2024-08-16 23:41:50 · 369 阅读 · 0 评论 -
【初阶数据结构题目】28. 层序遍历
设二叉树的根结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后从左到右访问第2层上的结点,接着是第三层的结点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历.除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行。原创 2024-08-15 00:58:32 · 433 阅读 · 0 评论 -
【初阶数据结构题目】27.前中后序遍历
前序遍历(Preorder Traversal 亦称先序遍历):访问根结点的操作发生在遍历其左右子树之前。中序遍历(Inorder Traversal):访问根结点的操作发生在遍历其左右子树之中(间)后序遍历(Postorder Traversal):访问根结点的操作发生在遍历其左右子树之后。二叉树的操作离不开树的遍历,我们先来看看二叉树的遍历有哪些方式。访问顺序为:根结点、左子树、右子树。访问顺序为:左子树、根结点、右子树。访问顺序为:左子树、右子树、根结点。原创 2024-08-15 00:58:02 · 387 阅读 · 0 评论 -
【初阶数据结构题目】26. TOP-K问题
问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。因为在最小堆中,堆顶元素总是堆中最小的元素。分四次建堆,每次建堆分别找到堆里面最大的10个数,最后在40个数里找到最大的10个数。问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。要存储4GB的内存数据,现在只有1GB,怎么找到里面最大的10个数?个元素依次与堆顶元素来比较,不满足则替换堆顶元素。个元素依次与堆顶元素比完之后,堆中剩余的。原创 2024-08-14 02:47:57 · 397 阅读 · 2 评论 -
【初阶数据结构题目】25.堆排序
通过分析发现,堆排序第二个循环中的向下调整与建堆中的向上调整算法时间复杂度计算一致,因此,堆排序的时间复杂度为。代码2:数组建堆,首尾交换,交换后的堆尾数据从堆中删掉,将堆顶数据向下调整选出次大的数据。代码1:基于已有数组建堆、取堆顶元素完成排序版本。该版本有一个前提,必须提供有现成的数据结构堆。原创 2024-08-14 02:47:18 · 529 阅读 · 0 评论 -
【初阶数据结构题目】24. 向下调整算法
删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。向下调整算法有一个前提:左右子树必须是一个堆,才能调整。将堆顶元素与堆中最后一个元素进行交换。将堆顶元素向下调整到满足堆特性为止。删除堆中最后一个元素。最底层不需要向下移动。原创 2024-08-13 01:37:09 · 199 阅读 · 1 评论 -
【初阶数据结构题目】23. 向上调整算法
因为堆是完全二叉树,而满二叉树也是完全二叉树,此处为了简化使用满二叉树来证明(时间复杂度本来看的就是近似值,多几个结点不影响最终结果)将新数据插入到数组的尾上,再进行向上调整算法,直到满足堆。个节点的堆,完成向上调整所需的移动步数的最终表达式。:这个表达式代表的是在堆的向上调整算法中,对于一个具有。:这个表达式代表的是在堆的向上调整算法中,对于高度为。的堆,完成调整所需的移动步数的另一种表达形式。这个表达式是基于二叉堆的性质,即堆的节点数。个节点的堆,完成调整所需的移动步数。:这个表达式代表的是对于具有。原创 2024-08-13 01:36:16 · 390 阅读 · 0 评论 -
【初阶数据结构题目】22.另一棵树的子树
【代码】【初阶数据结构题目】22.另一棵树的子树。原创 2024-08-12 00:06:57 · 327 阅读 · 0 评论 -
【初阶数据结构题目】21.对称二叉树
【代码】【初阶数据结构题目】21.对称二叉树。原创 2024-08-11 17:34:56 · 378 阅读 · 0 评论 -
【初阶数据结构题目】20.相同的树
两棵树都为空树------相同的树。其一为空树------不是相同的树。原创 2024-08-11 17:34:21 · 255 阅读 · 0 评论 -
【初阶数据结构题目】19.单值二叉树
【代码】【初阶数据结构题目】19.单值二叉树。原创 2024-08-10 18:31:46 · 211 阅读 · 0 评论 -
【初阶数据结构题目】18.设计循环队列
实际中还有一种特殊的队列叫循环队列,环形队列首尾相连成环,环形队列可以使用数组实现,也可以使用循环链表实现。来区别是队空还是队满,我们常常认为出现左图时的情况即为队满的情况。这里我们可以用数组来实现循环队列。如何判断队列是否为满?如何判断队列是否为空?循环队列,空间固定。循环队列的概念与结构。原创 2024-08-09 01:45:16 · 538 阅读 · 2 评论 -
【初阶数据结构题目】17.用栈实现队列
取队头:跟出队一样,但这里只取数据,不。假设我们要在队列里放。是否为空,不为空直接。原创 2024-08-09 01:44:39 · 455 阅读 · 0 评论 -
【初阶数据结构题目】16.用队列实现栈
入栈:往不为空队列里面插入数据。个数据导入到另一个队列中。出栈:找不为空的队列,将。原创 2024-08-08 01:42:45 · 282 阅读 · 0 评论 -
【初阶数据结构题目】15.有效的括号
遍历到的字符为右括号,取栈顶元素与。遍历到的字符为左括号,入栈。原创 2024-08-08 01:42:03 · 278 阅读 · 0 评论 -
【初阶数据结构题目】14.随机链表的复制
【代码】【初阶数据结构题目】14.随机链表的复制。原创 2024-08-07 12:11:07 · 386 阅读 · 0 评论 -
【初阶数据结构题目】13.环形链表II
让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的未尾。原创 2024-08-07 12:10:29 · 150 阅读 · 0 评论 -
【初阶数据结构题目】12.环形链表I
虽然已经证明了快指针不论走多少步都可以满足在带环链表中相遇,但是在编写代码的时候会有额外的步骤引入,涉及到快慢指针的算法题中通常习惯使用慢指针走一步快指针走两步的方式。按照上面的分析,慢指针每次走一步,快指针每次走三步,此时快慢指针的最大距离为。因此,在带环链表中慢指针走一步,快指针走两步最终一定会相遇。,接下来的追逐过程中,每追击一次,他们之间的距离缩小1步。,接下来的追逐过程中,每追击一次,他们之间的距离缩小。是奇数,第一轮追不上,快追上,错过了,距离变成。,既然不存在该情况,则快指针一次走。原创 2024-08-06 14:20:21 · 691 阅读 · 0 评论 -
【初阶数据结构题目】11.相交链表
【代码】【初阶数据结构题目】11.相交链表。原创 2024-08-05 00:59:18 · 397 阅读 · 1 评论 -
【初阶数据结构题目】10. 链表的回文结构
思路1:创建新的数组,遍历原链表,遍历原链表,将链表节点中的值放入数组中,在数组中判断是否为回文结构。设置数组来存储链表,设置数组头指针。指向的数是否相等,相等就。原创 2024-08-04 00:36:45 · 461 阅读 · 0 评论 -
【初阶数据结构题目】9. 链表分割
(因为这里是把2的next指向5,来让两个链表连起来。但是6的next我们没有改,在排序前6的next是2,所以这里会死循环)(把2的next指向6)原创 2024-08-04 00:36:03 · 313 阅读 · 0 评论 -
【初阶数据结构题目】8. 合并两个有序链表
因为链表分为空和非空两种情况导致代码有点冗余,我们可以通过封装函数或者直接创建一个空链表来解决。思路:创建新链表,遍历原链表,比较大小,谁小就尾插到新链表。原创 2024-08-03 23:28:49 · 209 阅读 · 0 评论 -
【初阶数据结构题目】7.链表的中间结点
慢指针每次走一步,快指针每次走两步,当快指针走到链表的尾结点时,假设链表的长度为。慢指针每次往后走1步,快指针每次往后走2步。为什么快慢指针可以找到中间节点?快指针走的路程是慢指针的两倍,即。就没有必要往后走了,此时。此时慢指针走的路程就是。原创 2024-08-02 01:38:44 · 424 阅读 · 5 评论 -
【初阶数据结构题目】6.反转链表
在原链表上就可以修改指针的指向(不需要创建新的链表)思路1:把第一个链表头插到一个新链表。思路2:创建3个指针,原创 2024-08-02 01:36:16 · 473 阅读 · 1 评论 -
【初阶数据结构题目】5.移除链表元素
思路2:创建新链表,将原链表中值不为val的结点尾插到新链表。思路1:遍历链表,在原链表执行删除指定节点的操作。原创 2024-08-01 00:19:05 · 360 阅读 · 0 评论 -
【初阶数据结构题目】4.合并两个有序数组
思路:定义三个指针变量。位置的数据,谁大,谁就往。原创 2024-07-31 01:52:42 · 317 阅读 · 1 评论 -
【初阶数据结构题目】3.删除有序数组中的重复项
思路:定义两个指针变量。指向数组第二个位置。删除有序数组中的重复项。指向数组第一个位置,原创 2024-07-30 00:05:23 · 383 阅读 · 2 评论 -
【初阶数据结构题目】2.移除元素
思路:定义两个变量指向数组第一个位置,判断。原创 2024-07-30 00:04:35 · 341 阅读 · 2 评论 -
【初阶数据结构题目】1.返回倒数第k个节点
【代码】【初阶数据结构题目】1.返回倒数第k个节点。原创 2024-07-29 21:48:51 · 167 阅读 · 2 评论