数据结构
文章平均质量分 75
相知-
这个作者很懒,什么都没留下…
展开
-
八大基本排序(详解)
前言博主将在本文讲述选择,插入,希尔,快速,冒泡,堆排,归并排序,记数排序.动图演示:复杂度时间复杂度:从图中可知gap越大,分成的小数组越多,希尔排序就是通过这种小区间预排,让数组似有序化,从而减轻最后一次直接插入排序(gap=1)的遍历次数,从而提升速度!希尔排序的特性总结:2.1.2 双向选择排序(对单向选择排序的优化)代码复杂度2.2 堆排序看我这篇文章:二叉堆的实现(含堆排序讲解),点击直达3.2 快速排序思想;代码模板:和二叉树的前序遍历很像!就是将数组分成最原创 2022-06-28 15:49:20 · 403 阅读 · 3 评论 -
堆的应用--------Top-k问题(详解)
文章目录1.什么是Top-k问题2.思路1---排序3.思路2---建堆,Top/Pop k次4.思路3---建一个大小为k的小堆(最优解)1.什么是Top-k问题TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。2.思路1—排序这个方法很容易想到,用我们的堆排序解决的话,时间复杂度是O(nlogn).void Swap(HPDataType* p1, HPDataType* p2)原创 2022-05-22 21:10:18 · 937 阅读 · 10 评论 -
数据结构-----二叉堆的实现(含堆排序讲解)
前言我们要想实现一个堆出来,那么我们得先知道父亲和孩子之间的关系!father=(child-1)/2;左child=father * 2+1;右child=father * 2+2;我们还得知道堆的结构,堆分为小堆和大堆,小堆就是在这个完全二叉树中,父亲一定比孩子小,大堆就是父亲一定比孩子大!举一个小堆的例子:文章目录堆的创建堆的初始化堆的销毁获取堆顶数据判空获取堆中元素个数堆的插入堆的删除堆的应用--堆排序堆的创建typedef int HPDataType;typedef str原创 2022-05-20 19:59:06 · 515 阅读 · 9 评论 -
数据结构篇————栈和队列来啦
前言喜欢博主的留下你们的三连!文章目录栈的概念栈的创建初始化栈入栈出栈获取栈顶元素获取栈的元素个数检测栈是否为空销毁栈队列的概念创建队列初始化队列入列(就是尾插)出列(就是头删)队列的头(先出去)队列的尾(后出去)判断队列是否为空输出队列的元素个数销毁队列栈的概念一句话:先进后出!我可以实现顺序栈,或者链式栈,但是由于栈只需要找尾,然后删除,故顺序栈是最优选!栈的创建和顺序表很类似!typedef int STDataType;typedef struct Stack{ STData原创 2022-05-16 19:09:30 · 314 阅读 · 11 评论 -
链表效率不高? 来看双向循环链表再下定论吧
前言:本文重点实现双向循环链表功能的实现以及讲解喜欢的老铁留下您宝贵的三连!文章目录双向循环链表图样创建新节点初始化链表链表的打印头插步骤样例和代码头删步骤样例和代码尾插步骤样例和代码尾删步骤样例和代码在pos的前面进行插入代码查找pos位置删除pos位置的节点代码重点(面试官让你十分钟写成链表的秘诀)头插的优化头删的优化尾插的优化尾删的优化链表销毁完整代码:头文件函数双向循环链表图样创建新节点ListNode* ListBuyNode(LTDataType x)//创建新节点{ List原创 2022-05-11 18:04:03 · 462 阅读 · 9 评论 -
二分查找面试题
前言本文主要叙述一下什么叫二分查找,以及二分查找使用的场景文章目录二分查找介绍代码展示面试题考法1.在一个有序数组中,找>=某个数最左侧的位置或者在一个有序数组中,找<=某个数最右侧的位置2.存在局部最小值问题二分查找介绍二分查找最最常见的就是在有序数组中查找某一个数的位置,具体操作就是用每次用中间元素和所需的数比较,如果在左边就取左部分,右边就取右部分!然后再去部分中间元素比较,直到找到为止!代码展示具体代码:int Binary_search(int arr[], int原创 2022-04-30 00:04:28 · 820 阅读 · 18 评论 -
数据结构篇----单链表的增删查改
前言本文重点讲述单链表的增删查改,有喜欢的老铁留下你们的三连!!文章目录链表基本概念链表的创建链表所需的功能函数函数的具体实现1.打印链表2.动态申请一个节点3.尾插4.头插5.尾删6.头删7.单链表查找8.单链表在pos位置之后插入x9.单链表在pos位置之后插入x10.单链表删除pos后面的值11.单链表删除pos前面的值12.单链表的销毁函数总汇链表基本概念概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。每一个节点就相当于原创 2022-04-25 21:35:35 · 926 阅读 · 8 评论 -
数据结构篇-----顺序表
前言本文重点讲述顺序表的增删查改,有喜欢的老铁留下你们的三连!!文章目录1.顺序表创建1.1静态顺序表1.2动态顺序表2.顺序表所需的功能函数3.功能函数的实现(重点)3.1初始化3.2尾插3.3头插3.4尾删3.5头删3.6在下标为pos的位置插入x3.6.1 改进头插和尾插3.7删除下标为pos的数据3.7.1改进头删和尾删4.函数总汇:1.顺序表创建1.1静态顺序表#define N 100typedef int SLDataType;struct SeqList//静态顺序表,N的值可原创 2022-04-22 23:31:32 · 940 阅读 · 7 评论 -
你的算法写的行不行得看这-----------复杂度(详解)
文章目录1.时间复杂度1.1时间复杂度的概念1.2练习1.时间复杂度1.1时间复杂度的概念时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。即:找到某条基本语句与问原创 2022-04-17 23:08:08 · 889 阅读 · 1 评论