为什么要学习数据结构?
因为编写一个好的程序,必须分析待处理对象的特性以及各个处理对象之间存在的关系
1.绪论
1.1基础概念(有个印象就行)
1.定义
数据结构就是数据在内存中存储的方式
数据>数据对象>数据元素>数据项
2、逻辑结构
集合结构
线性结构
树形结构
图形结构
3、物理结构
顺序存储结构
链式存储结构
索引存储结构
散列存储结构
1.2算法
基础概念
算法是解决特定问题求解步骤的描述
算法与DS的关系
DS只是静态的描述了数据元素之间的关系,高效的程序需要在DS的基础上设计和选择算法,算法是为了解决实际问题而设计的,DS是算法需要处理的问题载体,数据结构与算法相辅相成。
算法的特性(5个)
1.输入输出:算法具有零个或多个输入,至少有一个或多个输出
2.有穷性:算法在执行有限步骤后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成
3.确定性:算法的每一步都有确定的含义,不会出现二义性
4.可行性:算法的每一步骤都必须是可行的,每一步都能通过执行有限次数完成
算法设计的要求
1.正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案、大体可以分为以下四个层次:
- 算法程序没有语法错误
- 算法程序对于合法的输入数据能够产生满足要求的输出结果
- 算法程序对于非法的输入数据能够得出满足规格说明的结果
- 算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果
备注:针对算法正确性来说,第四层是最困难的,一般情况下,按层次三最为算法是否正确的标准
2.可读性:算法设计的另一个目的是为了便于阅读、理解和交流
3.健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果
4.时间效率高且存储量低:设计算法应该尽可能满足时间效率高和存储量低的需求
算法时间复杂度
输入规模,一个程序的运行时间,依赖于算法的好坏和问题的输入规模(指输入量的多少,通常指的是for循环中的n)
主要项和次要项
判断算法效率时,函数中常数和其他次要项可以忽略,主要关注主项(最高阶项)的阶数即可
备注:判断一个算法的好坏,通过少量数据是不能准确判断的,判断依据是某个算法,随着n的增大,它会越来越优于另一种算法,或越来越差于另一种算法