
数据结构初阶学习
文章平均质量分 71
c++的学习过程
one year.
一等二盼三落空,一想二干三成功
展开
-
初阶数据结构.排序(2.2冒泡排序)
上图其中利用flag是为了判断是否有序,提交前结束循环,提高效率。(排的是升序,如果想要排降序,可以修改一下if判断中的数组元素比较符号)原创 2024-08-02 07:27:24 · 301 阅读 · 0 评论 -
初阶数据结构:排序详解
任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排 序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列。原创 2024-07-31 10:08:07 · 1089 阅读 · 0 评论 -
初阶数据结构.排序(2.1快速排序)
(4)总体循环结束条件为,如果pi移动到ps相等的位置或者大于ps的位置则结束总循环,ps先走,ps所在元素如果大于keyi所在元素,则ps--,碰到小于的,则停下来,然后pi开始判断,如果pi所在元素小于keyi所在元素,则pi++,碰到大于的pi停下,最后将pi所在元素值与ps所在元素的值互换,然后进行下一次循环,同上。(5)最后将keyi所在的元素的值与pi所在元素的值互换,这样就构成keyi左边元素的值全部小于keyi所在元素的值,右边元素的值全部大于keyi所在元素的值。(本文只讲解一种版本)原创 2024-07-10 10:39:58 · 319 阅读 · 0 评论 -
初阶数据结构.排序(1.归并排序)
(6)这是当上述两个数组结束比较,其中肯定有一个未结束判断,如果是begin1未结束,则将begin1所在数组数组元素依次放入temp数组,相反将begin2未结束,将其中所在数组的元素依次放入temp数组中。(1)a为我们需要排序的数组,temp为我们创建的第三方数组,最后面会讲解其作用,begin为a数组的首个元素,end为a数组的位于末尾的元素。(2)判断a数组中的元素是否只有一个值,就返回,或者开始就判断该数组是否含有元素,如果没有就返回,大于两个元素,则进行下面的归并排序。原创 2024-07-09 21:20:21 · 364 阅读 · 0 评论 -
从入门到大佬:二叉树(3)
目录#二叉树链式结构的实现1.前置说明2.二叉树的遍历2.1.前序,中序以及后续遍历2.2层序遍历1. 前置说明在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于方便大家更容易理解,降低大家学习成本,此处手动快速创建一棵简单的二叉树。注意:上述代码并不是创建二叉树的方式,真正创建二叉树方式后序详解重点讲解。在再看二叉树基本操作前,再回顾下二叉树的概念,二叉树是:1. 空树2. 非空:根结点,根结点的左子树、根结点的右子树组成的。原创 2024-07-29 05:00:00 · 656 阅读 · 0 评论 -
从入门到大佬:二叉树(2)
(3)堆的插入,先利用元素个数和空间大小相不相等来判断空间是否足够,不足则进行空间的扩容,再把元素插入到堆的最后一个元素的后面,再进行向上调整算法来调整该元素所在堆应在的位置。下面我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算 法,把它构建成一个堆。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调 整算法。(5)堆的删除,将第一个位置和最后一个位置的元素交换,size--,即可。再将第一个元素向下调整,建堆。原创 2024-07-20 17:42:02 · 836 阅读 · 4 评论 -
从入门到大佬:二叉树(1)
对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。4. 若规定根结点的层数为1,具有n个结点的满二叉树的深度,h=log2(n +1). (ps: log2(n +1)是log以2为底,n+1为对数)如上图:B、C、H、I...等结点为叶结点 非终端结点或分支结点:度不为0的结点;双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;2. 若规定根结点的层数为1,则深度为h的二叉树的最大结点数是2^h-1。原创 2024-07-20 11:42:27 · 1128 阅读 · 1 评论 -
算法的时间复杂度和空间复杂度
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。基本操作执行最好N次,最坏执行了(N*(N+1)/2次,通过推导大O阶方法+时间复杂度一般看最 坏,时间复杂度为 O(N^2)。并且有的算法存在最好,平均和最坏情况,但在实际情况下,我们特别关注的是最坏运行情况。原创 2024-07-19 13:37:25 · 342 阅读 · 2 评论 -
栈的初步认识及实现
我们需要使用typedef这个关键词来给int定义一个新的名字STDataType(当然可以取为其他的名字),这样是为了防止以后我们栈中插入的数据类型不一,可以直接对int进行更改(例如:int->char),以免进行大量的更改。显而易见上图,先要判断栈中数据是否为空,为空就进行报错,不为空则返回下标为top-1的数据。2.if (ps->top == ps->capacity),是用来判断栈中的数据是否和容量相等,相等的话,则需要进行扩容操作。栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。原创 2024-06-05 19:28:39 · 283 阅读 · 0 评论