自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 【数据结构】排序(归并排序,计数排序)

稳定性。

2024-05-16 09:59:23 555 1

原创 【数据结构】排序(冒泡排序,快速排序)

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。中间的 key 值不用管,当前 key 值已经到了正确的位置。3.停止之后,left 开始走,如果 left 指向的元素小于key 指向的元素,则left++ ,如果指向元素大于key 指向的元素,则停止。

2024-05-15 22:02:53 902

原创 【数据结构】排序(选择排序,堆排序)

当begin 和maxi 的位置重合,那么begin 和mini 在交换的时候,就把最小值换到了 begin(maxi) 处,最大值被换走了。在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素。每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完。若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换。4. 稳定性:不稳定。

2024-05-15 12:56:25 298

原创 【数据结构】排序(直接插入排序,希尔排序)

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排 序算法是稳定的;直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

2024-05-15 00:04:47 924

原创 【数据结构】二叉树相关题目(2)

思路:每一层函数栈帧中都包括,如果 root 等于空,返回 false,如果调用相同的树为真,返回 true。每一层往下判断是否为相同的树。思路:先求出树的结点个数,开好数组之后进行后序遍历即可。思路:先求出树的结点个数,开好数组之后进行中序遍历即可。思路:先求出树的结点个数,开好数组之后进行前序遍历即可。思路:用求树深度的方式判断。

2024-05-04 19:22:46 218

原创 【数据结构】二叉树相关题目

时每一层函数的栈帧中存在这样的条件:p 为空,q 也为空,返回 true;p 或者 q 只有一个为空,返回 false;p 和 q 的 val 不等,返回 false;否则 p 和 q 的 val 是相等的才递归。两边同时遍历,边遍历边进行比较,完成遍历后返回真,否则为假。使用后序遍历的思想,先遍历,后调整。一棵树对称就是 它的左右子树呈。把左右看成两个独立的树。

2024-05-02 20:04:15 294 2

原创 【数据结构】二叉树的实现

而第二种情况是队列不为空,但在访问队头节点时访问到了 NULL,这时我们需要再次进行循环,若队列不为空,就进入循环逐个查找并删除队头的节点,若发现不为空的节点,说明节点间有 NULL 相隔,即该二叉树不是完全二叉树,返回false。设二叉树的根节点所在层数为 1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第 2 层上的节点,接着是第三层的节点,以此类推。若节点不为空,但节点的值不是我们要查找的值,就查找节点的左子树,如果查找的结果不为空,就返回该节点。

2024-05-02 18:25:40 7 2

原创 【数据结构】二叉树的结构与堆

堆删除的实质是删除堆顶元素,如果我们直接删除堆顶的元素,再将数据挪动,就会破坏堆的结构,所以这种方法并不可取;在这里选择的调整方法是:将根节点与它的孩子中的较小值交换,然后再将交换后的节点作为父节点继续与它的子节点交换,直到该节点小于它的子节点,或者成为叶节点。插入时从尾部插入,而是否为堆取决于子节点和父节点的关系,若为小堆则子节点要比父节点要大,否则就需要交换子节点和父节点,大堆则相反。换句话说,将根节点最大的堆叫做最大堆或大堆,根节点最小的堆叫做最小堆或小堆。,相反根节点始终大于子节点则称为。

2024-05-01 22:16:03 3 1

原创 【数据结构】二叉树概念与结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

2024-04-30 15:09:32 482 1

原创 【数据结构】堆的复杂度,堆排序和TOP-K问题

堆通常是一个可以被看作一个完全二叉树,满二叉树也可以看做一个完全二叉树,所以我们可以用满二叉树来证明。调整次数用N来表示,从倒数第二层开始调整(叶子节点不用调整)

2024-04-22 18:38:49 211 1

原创 【数据结构】栈与队列相关题目

队列大小是固定的,空间可以重复利用,当放置完最后一个数据后rear需要回到头部。,把有数据的队列的元素出到空队列直到只剩一个元素。再出栈剩下的那个数据,此时出栈数据就是栈顶数据。栈是先入后出,队列是先入先出,我们可以创建两个栈PushST,PopST,用来入队列和出队列。如果PopST中没数据则把PushST中数据导入到PopST,若有数据直接出栈。此题思路和栈很契合,遇到左括号压栈,遇到右括号就取栈顶元素匹配。因为队列是先进先出,栈是先进后出,所以我们可以创建两个队列,直接把数据放到PushST里。

2024-04-13 17:11:27 333

原创 【数据结构】队列的链表实现

这里注意,当队列里只有一个数据时,仅释放phead后ptail会变成野指针,所以这里多加一个判断,当队伍里只有一个数据时,phead和ptail都置空。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)因为队列是队尾入数据,队头出数据,在考虑到数组的头删效率比较低后,我们选择用链表来实现队列。因为单链表在尾插时比较麻烦,所以可以记录下队列的头和尾,以便尾插。入队列:进行插入操作的一端称为队尾。

2024-04-09 14:24:07 412

原创 【数据结构】顺序栈

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。

2024-03-28 13:38:18 352 1

原创 【数据结构】链表相关题目(2)

思路是先在原链表每个节点后面复制一个相同的节点,这样复制节点的random就是原节点random-->next,再断开复制节点即可。还是先用快慢指针,找到相遇点,存储下此点的下一个点作为。大体思路为先用快慢指针找。走,当两指针相遇时,就是环的。,找到相遇点后用一个指针从。,后用链表相交的方法即可。,然后让此点指向空作为。

2024-03-26 13:33:17 390

原创 【数据结构】 双向链表

在我们学习单链表的过程中,发现单链表有个,在单链表尾插时,需要找到尾节点。在单链表尾删时需要找到尾节点前一个节点。这里的时间复杂度都为O(N),而带头双向循环链表就完美的解决了这个问题。与单链表不同,双向链表多了一个prev指向了前面一个节点,最后尾也不指向NULL,而是指向了哨兵位。所以哨兵位的prev就直接能找到尾节点,简单且快速。

2024-03-14 17:27:01 909 1

原创 【数据结构】单链表相关题目

Q1:slow 和 fast一定会相遇么?A1一定会相遇,fast会先进环,假设slow进环时,slow和fast之间的距离是N,slow进环后,fast开始追击,slow每走1步,fast每走2步,他们之间距离每次会缩小1。追击过程中他们的距离变化:当fast每次走两步以上slow 和 fast能不能相遇?不一定,slow进环后,fast开始追击,slow每走1步,fast每走3步,他们之间距离每次会缩小2。

2024-03-06 17:23:27 696 1

原创 【数据结构】单链表

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的。

2024-02-26 13:03:33 910

原创 【数据结构】顺序表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。

2024-02-21 21:35:51 521

原创 【数据结构】空间复杂度

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用额外存储空间大小的量度。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因 此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。

2024-02-19 23:35:20 240 1

原创 【数据结构】时间复杂度

一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法 的时间复杂度。通过0对自身依次异或,将两个单独的数的异或后的结果找出,再通过结果将两个值分离开来,找到异或后结果的二进制序列,找出为1的位数(如果为1,则说明两个单独数在这个位不相同,可凭此将两个数分离),找到位数后,将按其他数的这个位数是否为1,还是为0分离,这就形成了两组数,在分别自身异或,最后剩下的就是单独数。

2024-02-19 02:29:37 1057 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除