- 博客(21)
- 收藏
- 关注
原创 七大排序算法(插入排序、希尔排序、选择排序、堆排序、交换排序、快速排序、归并排序)
几个回合后,begin和end最终会相遇,当左边先走,那就是begin遇到end,key赋值给end的位置,这样可以保证key比左边的数都要大,比右边的数都要小,可以达成排序的目的;假如是右边先走,最后begin和end仍然相遇,但是会是end遇begin,begin此时的值比key要小,当与end相遇发生交换时,会把这个小的数交换到右边去,导致右边出现比key小的数,不能完成排序,因此必须让begin遇end才行。因为左边选取的是比key小的数,所以遇到比key大的数时需要停下;步骤如下(以升序为例)
2024-09-24 22:33:22 713
原创 平衡二叉树(C语言)
这个方法容易想到,但是时间复杂度太高,为O(N*N),出现了重复计算,因此我们可以选择优化这个代码,将时间复杂度变为O(N)。平衡二叉树是指左右子树高度相差小于等于1的二叉树。
2024-09-05 20:32:53 212
原创 数据结构——循环队列的设计
定义:循环队列属于队列的一种,具有队列的功能,可以在头尾进行插入和删除,因为可以改变头尾指针的位置,所以具有在任意节点操作的功能。1.循环队列允许元素在队尾插入,在队头删除,同时遵循先进先出的原则。2.笔者推荐使用数组实现循环队列,数组相比链表节约了找尾这一步骤,更加方便的快速访问,同时循环队列用数组实现可以不用移动数组内的元素。3.在大量添加和删除元素时,循环队列相比链表更有效率,因为它不需要频繁移动指针寻找元素。4.缺陷:不支持随机访问,不能像数组一样直接访问特定位置的元素。比如不能实现二分查找。
2024-06-29 16:26:14 1045
原创 删除排序链表中的重复元素 II(C语言实现)
第三步,第一种情况下主逻辑为一个变量遍历到下一个不同的节点,另一个变量依次删除节点,第三个变量则链接链表。删除链表的重复元素可以使用对比的方法,前后两个元素进行对比,两个元素相同就进行删除,不同就继续遍历。第二步,第一种情况下为要删除的情况,需要删除,之后再链接;第二种为不同的情况,需要继续遍历寻找。第一步,分为两种情况,第一种为两个节点相同的情况,第二种时两个节点不同的情况。第四步,存在特殊情况,分为头删和尾删、全部删除,这三个需要注意野指针的问题。第五步,删除完成后返回链表头指针。
2024-06-16 22:34:58 235
原创 链表中的倒数第k个节点(C语言实现)
创造两个指针,把头节点赋值给两个指针。设置两个循环,第一个循环里是快指针先走(注意k可能会大于链表节点个数,因此需要写当快指针为空的情况),第二个循环是两个指针同时走,当快指针为空时循环结束。此题可以利用快慢指针,设置一个快指针和一个慢指针,让快指针先走k次,与满指针拉开k-1节点的距离,再让快指针和慢指针同时走,当快指针为空时,慢指针也会同时到达倒数第k个节点。
2024-05-31 07:00:00 360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人