数据结构
学习数据结构
Arcane Code
C++后端开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
环形链表问题
我们知道快指针fast走的路程是slow的两倍 假设fast比slow多走了n圈。所以我们可以在fast和slow相遇位置设置一个节点meet。2.链表中是否存在环形结构并且返回开始入环时第一个节点。当meet和head相遇时所在节点为进入环的节点。meet和head同时从当前位置移动每次走一步。快慢指针fast和slow相遇点是meet。只有通过计算我们才能得出思路!这是一个需要计算的题目。首先这种题目我们要想到两个快慢指针。1.链表中是否存在环形结构。入环节点和meet相距N。让我们看上面那个图像。原创 2024-09-12 22:53:22 · 389 阅读 · 0 评论 -
栈:括号匹配问题
将栈顶字符比较如果匹配删除栈顶字符继续遍历字符串遇到右括号就放入栈顶遇到左括号就比较。如果一开始遇到的就是左括号那么结束遍历返回false。将字符串S中的字符依次放入栈中如果遇到。假如所有括号都在字符串S中。原创 2024-09-12 23:23:41 · 214 阅读 · 0 评论 -
设计循环队列
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。原创 2024-09-16 13:46:09 · 401 阅读 · 0 评论 -
堆排序(向下调整)
再将堆顶最大的那个数和最后一个位置的数进行交换,再将剩下的数据排序成大堆,再将堆顶数据和堆最后一个数据交换,循环这样的操作一直到剩下最后一个数,便完成了排序。将二叉树构建成一个大堆使最顶端的数据是最大值,再将最顶端的数据和最后一个数据交换后,最后一个数据不动始终不变,将剩余的数据继续进行上面的思路一直到排完为止。这个函数可以将二叉树里某个位置的数据向下调整,如果这个数据的下面那个数据值比它大,那么这两个数据交换位置,一直到这个数据下面的值比它要小停止,比如我们随机创建一个数组。而堆排序的的思路就是。原创 2024-09-17 15:53:10 · 212 阅读 · 0 评论 -
用两个队列实现栈
用队列实现栈首先要建立两个队列,通过这两个队列的出入数据实现栈的出入数据以上就是队列的实现代码 放在上面供大家观看 这是我们用来实现栈的工具。原创 2024-09-16 12:11:04 · 508 阅读 · 0 评论 -
数组快排的四种方法
如上图所示数组第一个数值为key,设立两个指针L和R从数组两边向中间移动,右边指针先移动,如果右边指针指向比key小的数值那么key继续向中间移动,直到指向的数值比key要大停止。左边指针在右边指针停止后移动,如果指向了比key数值小的那么继续向中间移动,直到指向比key要大或者与R指针指向的位置相同停下。再左边指针停下后如果L指针和R指针没有重合那么交换L和R指向位置的数据,如果L指针和R指针重合那么交换key和R或L指针指向的数据。这样在key左边的数据就比key小在key右边的数据就比key要大。原创 2024-09-27 14:41:02 · 490 阅读 · 0 评论 -
归并的递归和非递归排序
从中间将一整个数组分成两个数组,假设这两个数组已经完成了排序,那么设立一个新的数组,取两个数组各自第一个数据进行比较,那个数组的数据小就放入这个新建的数组,然后再重新在这个数组取数,再和另外一个数组原来取的数进行比较,那个小那个就放入这个新建的数组,直到有一个数组的数被取完,那么另外一个数组的全部数据都将依次放入新建的组,再将新建的数组的数据mencpy到原数组中就完成了排序,那么要怎么使两边的数组都是有序的呢???请看VCR。原创 2024-09-27 15:16:42 · 309 阅读 · 0 评论 -
堆排序(向下调整)
选中一个数据将它和自己直接连接的上面那个数据比较如果最上面那个数据大小小于自己 那么交换位置 交换位置继续和上面那个数据进行比较 直到遇到比自己大的数据停止交换或当自己位于最顶端时停止交换。向上排序函数的参数有两个 一个是数组的地址(堆)一个是要进行排序的位置hp是堆的地址 i是要进行排序的位置那么现在再来到2.用向上排序函数实现堆排序。原创 2024-09-18 19:56:18 · 314 阅读 · 0 评论 -
取一个文件中最大的k个值(运行内存有限)
这时我们可以开辟一个大小为k的数组 将文件开头的数据放入数组中 将数据转化成小堆 所以数组第一个数据就是它所有数据中最小的数据 再将文件后面的数据 和数据比较 如果比数据第一个数据大 那么将这个数据移到数组第一个位置中 再变成小堆 再进行比较 再变小堆 一直持续到 文件数据被遍历完 这时 数组中的数据就是 文件中最大的k个数。我们只能利用10kb的运行空间去取一个有上万个数据甚至上亿个数据的文件时。如果使用冒泡排序和堆排序会很难实现。原创 2024-09-19 11:55:11 · 304 阅读 · 0 评论 -
数组插入排序和希尔排序
从数组第一个数开始,加入数组前面的一个数,将加入的数与前面的比较如果,如果这个数比前面的数要小,这两个数的数值交换,如果比前面的数值要大那么就停止交换。将数组下一个数加入到其中继续进行比较交换。一直到数组里没有数据可以进行交换那么这个排序就完成了。原创 2024-09-27 12:30:41 · 235 阅读 · 0 评论 -
用两个栈实现队列
两个链表实现队列原创 2024-09-16 11:39:35 · 400 阅读 · 0 评论 -
数组选择排序
选择排序的实现条件就是设置两个指针(次指针不是数据类型的指针而是int类型的值指向数组的下标)两个指针从最左端开始向右遍历,遍历结束一个指针指向该数组最大的值一个指针指向数组最小的值,将最大的值与与数组最右端的数据交换,将最小的值与数组最左端数据交换。当,max指向数组最左端时,我们将min指向的值与最右端的值交换,再将最右端的值与最左端的值交换,这样便修复了BUG。当出先这种情况时我们需要设立一个特殊情况时的特殊处理。一直到最右端和最左端都是同一个数组元素停止操作。将剩下的数组循环上述操作。原创 2024-09-26 20:21:52 · 238 阅读 · 0 评论
分享