【数据结构从0到1】总结篇:C语言实现初阶数据结构

在这里插入图片描述

系列文章目录

【数据结构从0到1】第一篇:算法的时间复杂度和空间复杂度
【数据结构从0到1】第二篇:顺序表和链表
【数据结构从0到1】第三篇:栈和队列
【数据结构从0到1】第四篇:二叉树
【数据结构从0到1】第五篇:排序(上)
【数据结构从0到1】第六篇:排序(下)


前言

总所周知,数据结构作为一门单独的学科,是不被语言所限制的,所以我们可以选择用最基础的C语言来实现一些初阶的数据结构,而关于高阶的数据结构,我们可以选择其他高级语言(c++)实现,本篇是我对学完初阶数据结构做出的总结和一些学习方法分享,希望对大家有所帮助。


一、学习方法和经验分享

对于学习数据结构最重要的就是画图+调试、画图+调试、画图+调试,重要的事情说3遍。画图可以帮助我们去整体理解、分析程序执行的过程,调试可以帮助我们一步一步去分析代码运行的过程,当我们遇到一个bug的时候是很难通过眼睛看而将代码的错找出来的,我们就需要将画图和调试相结合,边画图边分析,找出错误。时间久了,就会越来越熟练,当我们再遇到bug的时候就很容易就将它找出来了,同样刷图的时候也是要画图的,这样才能更快的进步。

然后就是在我们学习数据结构的时候千万不要心高气傲,认为自己是天才,总是以为自己比别人聪明,看一遍就会了,下去也不敲代码,不去分析、理解代码,这样学习的效果就是0,我们应该将自己当成一个普通的人去学习,该花时间的就花时间,不要认为是浪费时间,有哪个成功人士不是一步一个脚印走过来的,有时候越是有能力的人往往还越是努力,所以我们也要卷起来,千万不要成为被卷死的那个人。

其次就是学习效率,花费同样的时间去学习,有的人学的快,而有的人学的慢,这就是学习效率的原因了,学习的时候应该掌握重点,对于重要的知识点去深入理解,对于不重要的知识点就当成了解,千万不要去深究,注意学习的状态,如果你觉得你想要睡觉的时候,就去小睡一会儿,这无关打紧,不要认为我不休不眠的学习就会带来学习上巨大的收益,这是错误的理解,很容易欺骗自己,不要因为那一点时间导致学习效率变低,因小失大,将状态调整好才能更好的学习。效果也是相当明显的。

最后就是不要害怕困难,遇到一些难的数据结构就不去看,不去理解,也不去敲代码,就很容易被劝退了,反正总会经历的这一过程的,就像生活中遇到困难一样,逃避也是没有用的,勇敢去面对,去学习,当我们克服了这些困难之后就会发现生活到处都是美好,同样学习数据结构也是如此,当我们努力克服这些难点的过后,回头发现之前这些也还好吧,也不是太难,总之,就是保持一个好的心态去努力学习。

二、学习总结

首先数据结构初阶包含时间复杂度和空间复杂度、顺序表、链表、栈、队列、二叉树和排序

时间复杂度和空间复杂度不是程序运行所花的时间和空间,而是时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。

对于顺序表,用静态的数组数组实现很简单,我们就选择用动态开辟数组来实现顺序表。

链表根据带头或则不带头、单向或则双向、循环或则不循环可以分为8种链表,而我们实现的是不带头单向不循环链表以及带头双向循环链表,实现了这两种链表其它几种的链表实现起来就相对比较简单,而对于不带头双向链表,听名字比较简单,而实现起来就相对困难一些,不注意就会犯错,而这里很容易引起混淆的是将函数传参是传一级指针还是二级指针,记住口诀就是传值就穿一级指针,传址就穿二级指针,而双向带头循环链表听起来比较难以实现,其实实现起来是最简单的。最后就是实现链表最容易出现的就是指针越界,我们在实现的时候一定要分析多种情况。

栈的性质是后进先出,我们可以选择用数组或则链表来实现,在这里我们选择了数组实现,因为相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。对于栈的实现如果将顺序表的实现搞懂了,实现起来就是轻车熟路了。

队列的性质是先进先出,此时这里我们可以选择数组或则链表实现,此时我们选择的是链表实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低,而对于栈的实现只要我们将链表搞懂了实现也是比较简单。

二叉树的概念和性质比较多,我们也不需要每个去记,只需要记住一些重点的就可以了,然后普通的二叉树我们没有实现它的存储数据的方式,而是用堆(完全二叉树)实现了存储数据。然后就是堆的应用 TopK、如果选前N个大的数据就要建小堆,堆排序,排升序都要建大堆,这点要重点理解,最后就是二叉树的遍历,画递归展开图就可以了,重点就是层序遍历的时候要用到队列。

排序我们有直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、归并排
序和计数排序。其他排序就了解就可以了,比较难学的就是希尔排序、快速排序以及归并排序,其他相对比较简单,希尔排序需要分组,可以gap / 2,也可以gap/3+1,快排单趟排序需要选key,有三种方法,1. hoare版本、2.挖坑法、3.前后指针法,重点掌握前后指针法,最后多躺排序就是递归左区间,有区间,非递归的话需要用栈或则队列实现,归并排序就是直接将将数组分成两个区间,如果两个区间有序直接归并,没有序分别去排序它的递归它的做区间和右区间,非递归就是从递归反过来,从递归条件开始往前面去排序每个区间。最后就是这些排序的算法复杂度和稳定性了。

总结

本篇就是关于我对学完数据结构初阶后所做的总结,希望对大家在学习数据结构的时候有所帮助!!

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小唐学渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值