- 博客(9)
- 收藏
- 关注
原创 数据查找 二叉查找树
以LL为例,就是新插入的结点,在A结点的左孩子的左子树上(A结点是从下往上数第一个不平衡的点),插入之后导致不再平衡。于是A结点的左孩子(设为B结点)的右孩子单独拎出来,把右孩子变成A结点的左孩子,然后将这个拎出的B结点作为新的结点,它的右孩子连接到A结点上。二分查找就是在有序数组中,通过mid=(low+high)/2来判定中间值,将中间值与待查找的值进行比较,如果待查找的值大于中间值,那么就将范围缩小,查找右边;在该算法中确定比较值是非常重要的一件事,不同的比较值的确定可以决定不同的时间复杂度。
2025-07-18 22:01:28
343
原创 数据排序
比如,结点i的左孩子是2i,右孩子是2i+1。快速排序就是选取基准元素,然后将数组的元素分割成,小于等于该元素的,和大于该元素的。每次循环,将小于等于该元素的往左放,大于该元素的往右放,这样每次循环就可以确认出该元素的位置,同时将数组分成两个小数组再次处理。将元素分为d组,对每组使用直接插入排序,将直接插入排序的步调定为d,然后d值逐渐减小,直至为1。从左往右处理数据,每处理一个数据,就将这个数据从当前位置的前一个位置开始往前比较,直到找到小于它的数据,然后插在它的前面(以从小到大排序为例)。
2025-07-18 17:40:06
426
原创 数据结构总结复习(图)
所以采用了邻接表的形式,这个的概念就是,图的每个顶点都作为一个结构体结点,结构体内包含,当前结点的值和与它相连的结点的指针。图是由点和线组成的,也就意味着它的关系基本上就是由线来指引的点与点、点与线,线与线之间的关系。所以需要能够表示它们相互关系的结构来指示,矩阵就是一个很简单的方法,比如a[i][j]=1可以表示i、j之间存在边,a[i][j]=0表示不存在。先定一个结点,然后从那个结点开始,然后找最短的路线。确定最短路线对应的结点,将该结点纳入已经处理过的结点,然后再进行处理,找最短路线,进行循环。
2025-07-17 19:37:02
402
原创 数据结构总结复习(树)
这块没啥好说的,主要是自己要搞清楚这三种的概念,明确这三种是对于任何一个子树都成立的,所以当它进行判断后进入它的子树,它的子树要再次进行判断,判断依据依旧相同。所以下面它的三种基本操作是,生成一棵单结点树(自己只和自己有关系),找到所在树节点(找到与自己有关的根结点),合并两棵树(两棵树的根结点之间的关系改变)。)以及有的学校会把根结点算作第1层,有的会算作第0层,我这边按第0层来算。对于完全二叉树来说,i结点的左孩子的序号是2i,右孩子的序号是2i+1,按照这样的序号,可以看作把数据存储到一个数组中。
2025-07-09 23:24:12
765
原创 数据结构复习(数组和矩阵的相关处理,字符串匹配)
f(i)表示以位置i结尾的最大子数组的和,f(i-1)>0时,直接加上a[i],当f(i-1)<=0则此时f(i)最大值应该是a[i]这一个数值。大概的意思是,之间匹配不对,一个一个跳浪费时间,所以从待匹配字符串本身出发,比如是否有相等的小段字符,这样子如果匹配到第二段小段字符紧挨着的字符后失败,那么就可以直接把前面一段的移动过来,减少匹配时间。其实现在对它的概念还是不太清楚,但是我的理解就是,我做了当前的决定,这个决定会有多个可选择的项,之后,再对于缩小范围的相同问题,再做决定,应用递归会更顺一点(?
2025-07-09 17:31:49
705
原创 栈和队列的处理
老师的思路就是引进了队列,算是一种全新的思想,就是把当前位置填入队列,然后弹出,当前位置能接触到的证明是当前位置加一的距离,然后再把当前位置能接触到的填入队列。这个如果让我写的话,大概就是一个数组,一个指头,一个指尾,然后再加个额外判断,如果再往后到尾部,就回到开头,取出就头加加,填入就尾加加。思路就是遇到左括号压栈,遇到右括号弹栈,弹栈时进行匹配,匹配成功正常进行下一步匹配,不成功,就匹配失败,不再匹配。(这个也是,感觉中间的思路蛮厉害的,但是感觉更像数学方式,感觉之后也不太会用到,就随便记记吧)
2025-07-07 20:49:26
895
原创 链表的简单处理
如果有两个链表可以进行,那么其实很简单,先保存待处理链表的数值到另一个链表,然后再倒回去(其实我觉得这边用数组会更方便,因为单链表单向性有点麻烦,但是反正思路是一样的)。如果要求空间复杂度为O(1)的话, 则可以看做,当前元素的下一位元素应该放在当前已经反好序的所有元素前面,即头部,然后来进行(这边放老师写的代码,老师的代码真的简洁明了)此时,原单链表可以看作两条单链表,一条从p1开始,另一条从p2开始,结合链表相交问题,找到它们的第一个交点,即为环的起点(它们俩同步推进即可)。这是数学结论,记住吧。
2025-07-06 21:03:04
394
原创 用递归写m!/n!/(m-n)!
if (n < 0)return 0;return 1;return m;elseint main()int m, n;return 0;
2023-11-28 21:22:00
332
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅