数据结构
文章平均质量分 58
数据结构学习
天堂篱笆
这个作者很懒,什么都没留下…
展开
-
快速排序的三种版本及优化
快排三种版本:Hoare、挖坑法、双指针法;左边做key,右边先走。单趟排序的意义:分割出了左右区间、.key已经落到了正确的位置。快排两种优化:小区间用直接插入代替,减少递归调用、三数取中,防止顺序或逆序情况。原创 2022-12-29 09:47:56 · 324 阅读 · 0 评论 -
插入排序和希尔排序
插入排序的思想:已经有一个有序的序列,把新的值插入进去,依旧要保持有序,那么就要找对应的位置。先写单趟,再写全趟。希尔排序的思想:第一步:预排序(分组排序) 第二步:插入排序gap>1是预排序,gap==1是插入排序,gap越大,大的数可以更快的到后面,小的可以更快的到前面,越不接近有序(升序);gap越小,数据跳动越慢,越接近有序。希尔排序的时间复杂度O(N^1.3)原创 2022-12-22 16:27:48 · 80 阅读 · 0 评论 -
回文链表介绍及判断
回文链表介绍及判断原创 2022-11-09 15:14:57 · 264 阅读 · 2 评论 -
环形链表及其求法
带环链表求环的入口点法一:一个指针从相遇点开始走,一个指针从链表头开始走,他们会在环的入口处相遇。法二:设相遇点的下一个点为newHead,把相遇点和下一个点断开,让相遇点指向NULL,newHead作为新链表的头,此时就被转化为相交链表的问题。原创 2022-11-01 14:35:47 · 132 阅读 · 0 评论 -
数组建堆实现的优选及应用
向上调整建堆的时间复杂度是O(N*logN),对比向下调整建堆的时间复杂度是O(N),向下调整建堆显然更优。升序建大堆,降序建小堆。假设排升序,具体操作为:先建大堆,把最大的数和最尾的数换位置,把最后一个不看成堆里的,堆顶向下调整,选出次大的,重复如此。对于Top-K问题,最佳的方式就是用堆来解决,基本思路如下:(1)用数据集合中前K个元素来建堆((2)用剩余的N-K个元素依次与堆顶元素来比较,不满足则替换堆顶元素。原创 2022-11-25 11:09:13 · 239 阅读 · 0 评论 -
设计循环队列
为了能区分循环队列的空与满,必须在循环队列中多开一个空间,且这个空间不放数据。多开一个空间后, front==rear表示空;未满时,rear指向尾数据的下一个(即尾插时先放数据,再rear++);当rear的下一个==front则表示满。原创 2022-11-17 13:40:35 · 170 阅读 · 1 评论 -
堆的概念及用C语言的实现
当堆Push数据(堆尾插数据)时,为了维持堆,需要和父节点比较,大小顺序不一致就需要调整,调整一次后还要再跟父节点比较,顺序不一致继续调,此过程封装一个Adjustup函数。 当堆Pop数据(出堆顶数据)时,为了不影响树的结构,此时引入一个方法:将堆顶和堆底数据互换,删除堆底数据,但此时堆顶的数据是维持不了堆的,需要调整至下一层,也有可能这一层也维持不了堆,还需要继续向下调整,直至最底。调整的过程封装一个Adjustdown函数。原创 2022-11-22 16:55:26 · 465 阅读 · 0 评论 -
C语言实现栈和队列
栈的实现一般可以用数组或链表实现,但由于连续出栈时数组比链表更快,数组更优,因此选择以数组实现。队列的实现一般可以用数组或链表实现,但由于连续出数据时链表比数组更快(直接输入对头数据,新对头指向原对头的next),链表更优,因此选择以链表实现。原创 2022-11-16 20:10:22 · 558 阅读 · 0 评论