第一章 绪论
1.1 数据结构的基本概念
1.数据:计算机化的信息(all things)
2.数据>数据元素(记录)>数据项
数据元素是数据集合的个体。
3.数据对象:性质相同的数据元素的集合。
数据对象是数据的一个子集。
4.数据结构:是指相互之间存在一种或多种特定关系的数据元素合集。
eg:像学校还分为系、处、研究机构。
5.数据类型:是高级语言的变量种类。
可分为:
原子类型(不可以再分):整型、实型、字符型、指针
结构类型(可以分解的):数组
6.抽象数据类型:最重要的特点是数据抽象与信息隐蔽。
抽象数据类型包括数据对象、数据元素间的结构关系、操作。
1.2 数据结构的内容
数据元素之间的关系具体应包括三个方面:数据的逻辑结构、数据的存储结构、数据的运算集合。
1.数据的逻辑结构
形式定义:是一个二元组 Date_Structure = (D,R)
基本结构:集合结构、线性结构、树形结构、图结构或网状图
2.数据的存储结构
顺序结构:空间和位置都是按顺序
链式结构:用指针来处理顺序问题(就像医院挂号,大家拿完号,随便站,影响顺序的是票)
3.数据的运算集合
1.3 算法
1.定义:是规则的有限集合,是解决特定问题规定的操作(具体问题具体分析,江湖人称“身法”)
2.特性:有限性、确定性、可行性、输入(可以为0)、输出(至少有1)
3.设计要求
设计上一般应具有4个基本特性:
(1)正确性
(2)可读性
(3)健状性(鲁棒性)
(4)高效率和低存储量
1.4 算法描述
(这里就浅浅长话短短说)
算法、语言、程序的关系
算法用来描述数据对象之间的关系
语言是描述算法的工具
程序时候算法在计算机中的实现
1.5 算法性能评价
1.耗费的时间:该语句的执行次数 × 执行一次需要的时间
2.语句频度:该语句在一算法中重复执行的次数
Eg:
for(i=0;i<n:i++) \\n+1
for(j=0;j<n;j++) \\n(n+1)这边的加一是j++的那一次 不满足j<n就跳出
{
c[i][j] = 0; \\n²
for(k=0;k<n;k++) \\n²(n+1)
c[i][j]=c[i][j]+a[i][k]*b[k][j] \\n³
}
算法的时间耗费 = 语句的频度之和f(n)
3.时间复杂度:随着问题规模n的增大,算法的时间增长率和f(n)的增长率相同。全名为算法渐进时间复杂度。
T(n) = O(f(n))
n:问题规模 (可以稍稍自己查资料理解一下) O:数量级 T(n):算法的时间度量
分析算法的时间复杂度推导大O阶:
---用常数1取代运行时间中的所有加法常数
---在修改后的运行次数函数中,只保留最高项(主项、次项 联系主次要矛盾思想不要太四磕)
---如果最高项存在且不是1,则去除与这个项相乘的常数
---最后的结果就是大O阶
4.渐进时间复杂度
一般和时间复杂度看成一样的,不做区分。
当若干个循环语句嵌套时,算法的时间复杂度是和嵌套层数最多的循环语句中最内层的f(n)决定。
5.常用时间复杂度(七种)
常数型O(1) 对数型O(log2^n) 线性型O(n) 二维型O(nlog2^n)
平方型O(n²) 立方型O(n³) 指数型O(2^n) (时间复杂度从小到大排)
当说求“复杂度”的时候一般都是说求时间复杂度。
6.耗费的空间:实际占用的辅助空间总和。
7.空间复杂度:算法耗费的存储空间的数量级S(n)。()
S(n) = O(f(n))
1.6 数据结构和C语言
程序结构 = 数据结构 + 控制结构
程序 = 算法 + 数据结构
面向对象 = 对象 + 类 + 继承 + 通信
面向对象程序设计的特点:封装性、继承性、多态性
(这里我觉得没那么重要可以自己看看就好啦,下一章的线性表更加需要注意!)
加油喔!!!(●'◡'●)