数据结构
文章平均质量分 70
数据结构基本知识及踩坑集合
༺ Dorothy ༻
量变引起质变
展开
-
二叉检索树的查找删除(替换删除)的实现
当当前结点元素key小于要查找的元素的key时,该元素一定在当前结点的右子树中,以此递归的进行search(),直到key相等。反之亦然。原创 2024-04-20 15:17:06 · 814 阅读 · 1 评论 -
二叉检索树 及 插入方法的图解、实现、时间代价分析
注意,输入的英文含义中如果含有逗号一定是中文逗号。原创 2024-04-19 22:25:31 · 853 阅读 · 0 评论 -
利用二叉检索树将文章中的单词建立索引(正则表达式)
例子:正则表达式 a.b 可以匹配到 “axb”、“a1b”、“a-b” 等,但不能匹配到 “aab” 或 “a\nb”(除非设置了多行模式)。例子:正则表达式 (ab)+ 匹配一个或多个 “ab”,并且可以通过捕获括号提取匹配的内容。原创 2024-04-28 18:22:27 · 1102 阅读 · 0 评论 -
文件读取和写入及不同访问模式的对比(‘r‘ ‘r+‘ ‘w‘ ‘w+‘ ‘a‘ ‘a+‘ ‘rb‘)
如果尝试写入文件(例如使用 write() 方法),将抛出 io.UnsupportedOperation 异常。1、自动关闭文件:with 语句会在代码块执行完毕后自动关闭文件,无需显式调用 close() 方法。1、功能:以只读方式打开文件。2、异常安全:如果在代码块中发生异常,with 语句仍然会确保文件被正确关闭。3、代码简洁:无需编写额外的 close() 调用,使得代码更加清晰。2、使用场景:当你需要读取文件内容而不需要修改它时。文件指针默认位于文件开头。文件指针的初始位置不同。原创 2024-04-23 21:55:20 · 431 阅读 · 0 评论 -
二叉检索树的实现——增删改查、读取命令文件、将结果写入新文件
两者思路一致,将二叉树分为三部分:左子树,根结点,右子树。对左子树,右子树递归遍历。原创 2024-04-24 17:11:40 · 1186 阅读 · 2 评论 -
数据结构复习Final
原创 2024-05-12 16:53:19 · 407 阅读 · 0 评论 -
数据结构——图
一个G中所有顶点的线性顺序。对于G中任意顶点I和j,如果i是j的前驱,那么在这个线性顺序中i一定在j之前每个AOV网都有一个或多个拓扑排序序列通过BFS获得一个拓扑排序扫描整个图,计算每个顶点的入度让入度为0的顶点进入队列如果队列非空,从队列中删除一个顶点并输出,同时将其所有相邻顶点入度减1,当某个相邻的顶点的入度为0时,则将这个顶点插入到队列中重复上述步骤直到队列为空如果还有顶点没有输出,则表明这个图存在环,不符合AOV网的定义。原创 2024-05-10 22:20:29 · 1451 阅读 · 1 评论 -
递归法求解最大连续子序列和MaxSubSum
在这里插入图片描述](https://img-blog.csdnimg.cn/direct/dbffd746f8e8465d8c99d8043ba9cb7d.png。求解一个最大子序列和,有三种情况,在讨论之前我们先规定中间元素简称为mid。数据规模一直在减半,在减半的过程中,序列元素个数不断减少,到最后一层就是基准情形。该问题满足像基本情形不断推进,因此可以用该思路写递归算法。当序列中只有一个元素时,最大子序列和就是它本身。那么求解子序列和与递归法有什么关系呢。根据给出的例子输出结果如下。原创 2024-03-22 23:57:18 · 611 阅读 · 1 评论 -
栈的应用——用栈实现算数混合运算表达式的计算
算数运算符分为单目运算符和双目运算符等: 用于表示正数或给数值一个正号。例如:+5 仍然是 5。: 用于表示负数或取一个数的相反数。例如:-5 是 -5,而 -(-5) 是 5。: 这是一个按位非运算符,用于对整数的每一位进行取反操作。例如,对于数字 5(其二进制表示为 101),位非运算的结果是 ~101,即 -6。需要注意的是,Python中的大多数运算符(如加法、减法、乘法、除法、取模等)都是双目运算符,它们需要两个操作数。而逻辑运算符(如and、or、not)中的not是单目的,但它更常用于。原创 2024-04-05 11:00:55 · 1354 阅读 · 0 评论 -
递归法解决归并排序问题
由于归并排序需要申请额外的空间,即创建一个新数组来存放排好序的数组,因此空间复杂度就是该数组的大小n。最坏情况和最好情况均相同、因为数据都是被一分为二的、不存在像快速排序分割方式不当的情况。如上图,如此循环下去就能将两个小数组排好序,合并成大数组。将数组分解成两个较小的数组,直到子数组的大小为一。递归对子数组进行排序合并,直到合并成完整的数组。空间复杂度((用数组存储数据):S=O(n)时间函数:T(n)=2T(n/2)+cn。用链表存储数据空间复杂度为:S=O(1)时间复杂度:T=O(nlogn)原创 2024-03-25 22:48:36 · 527 阅读 · 1 评论 -
快速排序和快速排序优化运行结果对比(处理不同容量大小的数组)
分别实现快速排序和优化的快速排序算法(子问题规模小于某个阈值时使用直接插入排序替换),并按如下要求进行测试:测试数据的规模分别为 100,200,300,⋯,10000) 共100组,测试数据分为正序、逆序和随机三种序列分布。对上述测试要求下的两种快速排序算法执行的时间趋势变化以图形的方式展示。原创 2024-04-11 17:09:31 · 459 阅读 · 0 评论 -
数据结构之————线性表ADT、以数组存储方式实现抽象类型的一个实例
它主要指的是数据元素之间的相互关系,即数据的组织形式。简单来说,数据结构就是用来组织、存储和管理数据的方式或方法。数据结构可以分为逻辑结构和物理结构。逻辑结构是从逻辑关系上描述数据的,它与数据的存储无关,是独立于计算机的。逻辑结构主要包括线性结构、树形结构、图形结构等。而物理结构,也叫存储结构,是指数据结构在计算机中的表示(又称映像),它包括数据元素的表示和关系的表示。物理结构主要有顺序存储和链式存储两种方式。选择何种数据结构来组织数据,会直接影响到算法的效率。比如,我们常用的。原创 2024-03-28 21:11:52 · 2806 阅读 · 0 评论 -
二叉树的性质和分类
等比数列求和:1+2+4+8+……=a1(q^n-1)/(q-1)原创 2024-04-14 15:00:29 · 336 阅读 · 0 评论 -
二叉树的遍历——BFS广度优先搜索
#(2)测试示例。原创 2024-04-08 21:08:09 · 398 阅读 · 0 评论 -
顺序栈、链式栈、顺序队列、链式队列的ADT及其实现
第三中方案,即达到入队出队操作的时间代价是O(1)同时可充分利用空间,不会出现空间似乎用完了的假象时间性能和空间性能发挥到最大。原创 2024-03-29 21:05:15 · 378 阅读 · 0 评论 -
循环队列的实现及应用——桶排序bucket_sort、基数排序radix_sort
对于排序法,我们已经学了三种简单排序:直接插入排序、冒泡排序、选择排序,快速排序、归并排序。因为前面提到的几种排序方法全是基于比较的排序,时间复杂度在最好的情况下才是O(nlogn)而桶排序没有用比较就将数字排好序了,虽然以消耗空间为代价,但是时间复杂度得到了很大的提升。注意代码中print()的地方,将有助理解代码运行效果,输出样例已给出。和对数组的排序一样,对字母的排序实质上是对其ASCII码的排序。当m原创 2024-04-06 19:18:50 · 628 阅读 · 0 评论 -
二叉树应用——最优二叉树(Huffman树)、贪心算法—— Huffman编码
从图中可以看出,深度越浅的叶子结点权重越大,深度越深的叶子结点权重越小的话,得出的带权外部路径长度越小。原创 2024-04-10 17:20:51 · 1799 阅读 · 0 评论 -
同时利用【递归法、三值取中法、双指针法】解决快速排序问题(深入浅出,逐层理解)
写在前面的话。原创 2024-03-24 05:10:33 · 1302 阅读 · 1 评论 -
栈的ADT实现——有空间限制的栈
(2)当我们使用很多软件时都有类似“undo”功能,比如Web浏览器的回退功能、文本编辑器的撤销编辑功能。这些功能都可以使用Stack实现,但是在现实中浏览器的回退功能也好,编辑器的撤销功能也好,都有一定的数量限制。因此我们需要的不是一个普通的Stack数据结构,而是一个空间有限制的Stack,虽然空间有限,但这样的Stack在入栈时从不会溢出,因为它会采用将最久远的记录丢掉的方式让新元素入栈,也就是说总是按照规定的数量要求保持最近的历史操作。比如栈的空间是5,当a,b,c,d,e 入栈之后,原创 2024-04-06 09:18:47 · 639 阅读 · 0 评论 -
对冒泡排序,简单选择排序,简单插入排序的比较 (在线性、部分性、稳定性)
在给考生排序时,当高考总分相同,比较语文成绩,语文成绩相同比较数学成绩,以此类推。*从上图可以观察得到:在第三次的排序结果中:简单选择排序和冒泡排序在排好的部分(图中蓝色部分)和最终的排序结果一样,而简单插入第三次排序的排好部分和最终结果不一样,也证实了上述观点。(虽然学生A\B总分相同,但A、B的相对位置发生了变化,并且改变了语文成绩原来的相对位置,这就说明在这个过程中出现了稳定性问题)学生A,总分600分,语文110分。学生A,总分600分,语文110分。学生A,总分600分,语文110分。原创 2024-03-23 09:57:16 · 324 阅读 · 0 评论 -
蓝桥杯算法题练习
(此时并不是钱多的人出均值,或者其中几个钱多的人替钱少的人补上钱就能是最优解,要对当下要付的钱取平均才是最合适的,可以理解成钱多的人均摊得补上了钱少的人所付的钱)然后,Python会检查"2" in l,如果l中包含"2",则整个条件为True;如果l中不包含"2",但由于"2"已经是一个True值,整个条件仍然会被视为True,而不会继续检查后面的"0", “1”, “9”。只有当l中实际包含"2", “0”, “1”, 或者 "9"中的任意一个时,对应的条件才会为True。面条数=弯+2=2^n+1。原创 2024-03-27 20:30:15 · 763 阅读 · 0 评论 -
二叉树的遍历——DFS深度优先搜索——先(根)序遍历、中序遍历、后序遍历
这里的先、中、后是针对根结点的。并且总是先左后右。先序遍历的访问顺序是:根节点、左子树、右子树(根、左、右)中序遍历:左、根、右。后序遍历:左、右、根其中隐藏了递归思想。如:先序遍历先访问根结点,然后访问左子树,对于这个左子树的访问,其顺序依然是根、左、右;当这个左子树访问完成后,访问右子树,对于这个右子树也一样,先访问根结点,然后访问左右子树。原创 2024-04-08 23:07:20 · 763 阅读 · 0 评论