当当当,我们又双叒叕来和小伙伴见面了
为响应疫情期间#停课不停学,我们隆重推出线上课程,接下来就由小编带领大家了解一下数据结构叭~~
前言
数据结构:研究非数值计算的程序设计问题中的计算机操作对象以及它们之间关系和操作的一门课程。
数据结构作为一门计算机基础课,它的重要性不必多说,然而学习过程也十分烧脑。这个系列是为帮助一些同学更快的将数据结构重要思想内化。Let’s go!
0x01 绪论
01
首先我们要知道数据结构的主要研究内容:
·数据的逻辑结构
·数据的物理结构
·算法
·了解顺序与链式结构的优劣以及使用的场合
02
算法的五大特性:
输入,输出,确定性,有穷性,可行性
重点要掌握时间复杂度的分析(执行次数与问题规模n之间的关系)
算法的时间度量记为:T(n)=O(f(n))
(其中O表示渐近上限,T(n)称为算法的渐近时间复杂度。在一个算法中,基本操作的重复执行次数是问题规模 n 的某个函数,用f(n)表示。随问题规模n的增大,算法执行时间T(n)的增长率和f(n)的增长率相同。)
时间复杂度一般用O(n),O(log n),O(n^2)等表示
例如上面这个题,i从1开始,每循环一次变为原来的两倍。所以时间复杂度就是O(log n)
03
线性结构
主要有数组,链表,栈,队列,(字符)串等数据
数组就不多说了,随机存取快,插入删除慢
而链表则相反,需要注意的是链表插入删除时指针改变的顺序,不能让前面的指针改变影响到后面指针,双向链表也是同理
栈是先进后出(FILO),而队列是先进先出(FIFO),栈的实现有数组与链表两种,基本操作:进栈,出栈,判断栈空,栈满条件。给入栈顺序要写出所有可能的出栈顺序
队列的重点是循环队列,基本操作也是入队列和出队列,但是判断队列空或者队列满的条件有两种,一种是少使用一个空间,让front == rear时表示队列空而(rear+1)%MaxSize == front来表示队列满。(注意队首与队尾位置的定义,看到我上面写的表达式可以知道我队首时指向队列的第一个元素而队尾是队列最后一个元素的下一个位置)
链队列:只需注意删除最后一个元素时队尾指针需要修改,否则将会丢失队尾指针
串需要掌握的东西不多,就是kmp算法,但是真正理解起来比较难。个人建议是可以根据visual studio单步调试用纸一步一步的写一遍过程,我也没有更好理解的方法了-_- 。必须要知道kmp算法中next数组的求法
例如:
本期数据结构的介绍到这里就要和大家说goodbye啦
有问题的小伙伴可以在评论区留言哦
开学时间也快要到啦
许多课程开始进行线上学习
希望大家能及时调整到学习状态
在家也能好好学习
一起加油鸭
文案:邹伟
排版:龙芯雨