数据结构差不多是所有CS考研同学的必考专业课,尤其是考408(浙大 中科大 上交 北航等等都是呢-o-)的小伙伴。也是所有面试算法岗的童鞋不可逃避的一门课。这个笔记是参考浙大陈越姥姥的那门数据结构,在B站有相关的网课视频,但是清华大学计算机考研912的数据结构中要考的红黑树 B树等相关考点却没有涉及到,这里也会相应作出补充。同时也会在Github上传调试过的源码,需要PPT的同学可以私信我。在接下来一段时间,我会在业余时间慢慢更新整理补充这个Note。
数据结构-浙江大学 陈越、何钦铭www.bilibili.com课程地址:https://www.icourse163.org/course/ZJU-93001
这里我的IDE用的是VScode,零基础跨考的同学先去学习基本的C语言的语法,我这里全部都是用C完成的相关作业。
第一章:数据结构基本概念
1.1.1、数据结构的定义:这里没有统一的定义
如下两种描述
- “数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。” ——Sartaj Sahni《数据结构、算法与应用》
- “数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。” ——Clifford A.Shaffer《数据结构与算法分析》
- (这里我自己认为数据结构大概是对具体问题的成员进行的抽象~~~)
1.1.2、关于空间使用
demo1.1.2:
实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数
这里当N的规模为100000时,递归实现的程序会发生error(原因是爆栈了!)
解决问题方法的效率,跟空间的利用效率有关。(但是在数据结构这门课中,对于空间复杂度的讨论远远没有时间复杂度的多 O。O)
1.1.3、关于算法效率
demo1.1.3:
计算多项式在给定点x处的值f(x)=an·x^n+an-1·x^(n-1)+…+a2·x^2+a1·x+a0
1.1.4、抽象数据类型
所以到底什么是数据结构???
数据对象在计算机中的组织方式
- 逻辑结构
- 物理存储结构
数据对象必定与一系列加在其上的操作相关联,完成这些操作所用的方法就是算法。
抽象数据类型(Abstract Data Type)
- 数据类型:(1.数据对象集 2.数据集合相关联的操作集)
- 抽象:描述数据类型的方法不依赖于具体实现(1.与存放数据的机器无关 2.与数据存储的物理结构无关 3.与实现操作的算法和编程语言均无关)
1.2.1、算法(Algorithm)的定义
- 一个有限指令集
- 接受一些输入(有些情况下不需要输入)
- 产生输出
- 一定在有限步骤之后终止
- 每一条指令必须有充分明确的目标,不可以有歧义,计算机能处理的范围之内,描述手段要抽象而不是依赖于任何一种计算机语言以及具体的实现手段
1.2.2、算法的衡量指标
- 空间复杂度S(n)
- 时间复杂度T(n)
1.2.3、时间复杂度的渐进表示法
算法(一)时间复杂度_BATcoder - 刘望舒-CSDN博客_时间复杂度
算法的时间复杂度和空间复杂度-总结_zolalad的专栏-CSDN博客_时间复杂度
for、while等循环的时间复杂度计算较为容易,这里比较头疼的是递归的时间复杂度的计算,这个参考最最最经典的Thomas H. Cormen、Charles E. Leiserson几个人那本《Introduction to Algorithms》的内容,通过主定理来分析递归表达式的渐近复杂度。
主定理的证明及应用举例
这里关于递归表达式的时间复杂度的计算也可以参考天勤考研数据结构的网课中对于递归算法复杂度分析部分。这里倒是没怎么讨论关于空间复杂度的问题,408数据结构部分的真题还是比较喜欢考察复杂度的计算。
21考研天勤数据结构www.bilibili.com第二章:线性表(顺序表,链表)
顺序表
链表