一、数据结构引论
1.1算法以及复杂的概念
关于数据和数据结构,数据对象的基础认识
1.1.1算法与程序
如何用程序代码把现实世界的问题信息化;
如何用计算机高校地处理这些信息从而创造价值。
概念:算法是解决问题的一种方法或者一种过程;算法是由若干条指令组成得有穷序列。(来源王晓东《数据结构》)
性质:输入、输出、确定性、有限性(每条指令执行时间、次数有限)
算法和程序的不同:
一个出色的程序设计,离不开算法帮助。但程序一句简单的hello world的输出并没有用上算法。
例如:如何打印一句话是一个问题;如何解决这个问题就是一个算法;那这样子,所有程序都是算法的实现了。
程序是算法用某种程序设计语言的具体体现,程序可以不满足算法的有限性。(来源王晓东《数据结构》)
1.1.2算法时间复杂性(详细)
复杂性高低与计算机资源需求多少成正比。
算法的复杂性是指运行算法所需要的计算机资源量;这个量应该只依赖于算法要解的问题的规模和算法输入的函数。(来源王晓东《数据结构》)
时间复杂度是方便开发者估算出程序运行的答题时间的函数。
假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。
1.2算法表达与数据表示
1.2.1问题求解
数学化问题–设计求解方法–用程序设计语言来表达–通过编辑、编译、测试程序直到输出结果
1.2.1表达算法的抽象机制
算法实现要素:数据(声音、树、图、图像等)、运算(逻辑运算、关系运算等)、控制(顺序、分支等)。
高级程序设计语言:
①、控制转移方式:默认的顺序控制、条件(分支)、选择(情况)、循环、函数调用(递归函数)、无条件转移
②、好处:容易、好用;设计出的程序可读性好、可维护性强、可靠性高、可移植性好、重用率高;自动化程度高、开发周期短。
1.3抽象数据类型
概念:
①、是算法的一个数据模型连同定义在该模型上并作为该算法构件的一组运算。(来源王晓东《数据结构》)
②、数据抽象是一种依赖于接口和实现分离的编程(设计)技术(来源菜鸟教程)
好处:
①、类的内部受到保护,不会因无意的用户级错误导致对象状态受损;
②、只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节;
③、可移植性好、重用率高;
④、使其编出来的程序结构清晰、便于程序正确性以及复杂性分析。
1.4数据结构和数据类型
数据是按照数据结构分类的,每一种数据结构对应着每一种数据类型。
数据结构(数组结构和记录结构)
①、数组结构:数据个数固定,每个数据结构一样,属于同一数据类型(基类型),按数据下标排列,具有线性、均匀的特点,可随机访问,结构良好。
②、记录结构:数据个数固定,无顺序(平等),每个数据都有域名,不同的域允许数据类型不一样,可随机访问数据,途径是域名访问。
1.5用C语言描述数据结构和算法
1.5.1变量和指针
①、变量:程序可操作的存储区的名称
属性:变量名、地址、大小、类型、值、生命期、作用域
例如:C语言变量类型
类型 | 描述 |
---|---|
int | 整数型 |
char | 字节 |
float | 单精度浮点值 |
… | … |
②指针变量(“指针”是概念,“指针变量”是具体实现)
形式:type*
*表示说明这是一个指针变量;type是指针变量所指向的变量的数据类型。
例如:char k, d, *c;(c指向char的指针)
1.5.2函数与参数传递
①、函数:函数名、形参表、返回类型和函数体。
例如:int max (int x, int y);
max函数名;int x、int y形参;int返回的值类型 。
②、参数传递:实际参数就会将参数值传递给相应的形式参数(它俩从类型、个数和顺序上保持一致)
方式:按值传递参数、按地址传递参数、按数组传递参数(深入了解)
1.5.3结构(数据元素之间的关系)详解
①、组成:结构名+数据成员;
②、类型:线性结构、树形结构、集合、图状结构或网状结构;
③、访问结构变量的数据成员(.(点)运算符和 ->(箭头)运算符);
④、新数据变量初始化(结构体变量可以在定义时指定初始值);
1.5.4动态存储分配
①、C语言中的malloc()和free()函数(详细)
②、动态数组
动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标;当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。(来源百度百科)
③、二维数组:动态分配二维数组(详细)
1.6递归(调用函数自身的方法)
1.6.1概念(详细)
①、阶乘函数
②、Fibonacci数列
③、排列问题
1.6.2间接递归
通过调用别的函数间接的调用自己