一、绪论
1、什么是数据结构?
程序设计=数据结构+算法
简单来说数据结构就是关系,数据结构分为逻辑结构和物理结构;
逻辑结构:指数据对象中数据元素之间的相互关系;
物理结构:数据的逻辑结构在计算机中的存储方式。
2、数据结构分类
四大逻辑结构:
1、集合结构:数据元素除了同属于一个集合外,两两之间没有任何关系,不存在谁优先谁;
2、线性结构:元素之间一对一的线性关系;
3、树形结构:元素间存在一种一对多的层次关系;
4、图形结构:数据元素间是多对多关系。
物理结构
存储器主要指内存而言。有两种存储方式:
1、顺序存储:把数据元素存放在地址连续的存储单元里,数据见的逻辑关系和物理关系是一致的;(普通排队、数组的存放)
2、链式存储:把数据元素存放在任意的存储单元里,存储单元可连续也可不连续。需给定数据元素地址(指针信息,通过指针将各个数据元素链接起来)。(叫号排队)
优缺分析:顺序存储简单但不灵活,链式存储形式更为灵活,但多了指针存储。
二、数据结构和算法的关系
数据结构和算法是紧密联系,互不分离的,已实现程序设计,从而实现某一功能。
1、算法初体验
例:一个问题:1+2+3+……+100计算问题
思路一:直接计算for循环,运行100次循环;
思路二:首尾想加,(1+100)*50,运行1次即可。
什么是算法:解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。通俗来说就是实现某一目的的技巧和方式。
算法具有多样性:同一个问题可用多个算法解决;一个算法也不可能解决通问题。
2、算法的特性
输入:0个或多个输入;
输出:至少有1个或多个输出;
有穷性:执行有限步骤后,自动结束而不会无限循环;
确定性:每个步骤含义确定,没有歧义,
可行性:每一步都可被完成。
3、算法设计要求
1、正确性:具备必备条件,反映需求,给出正确答案;
2、可读性:方便阅读理解交流;
3、健壮性:数据不合法时,算法能做出处理而不产生异常或崩溃;
4、时间效率高存储量低。(时间复杂度和空间复杂度)
三、时间复杂度和空间复杂度
1、算法效率的度量方法
主要指执行时间:
a)事后统计方法,预先编好测试程序去测试已实现算法;事后诸葛亮,且和实现硬件平台有关系。
b)事前分析估算法:程序编写前,依据统计方法对算法进行估算。
一个程序的运行时间主要依赖于:算法好坏和数据规模!
2、算法的时间复杂度
定义:算法语句执行的总次数T(n)随着问题规模n的变化情况确定其数量级;侧重于变化潜力,而不是当前某个值,记作O()。
一般数量级增长最慢,算法最优。
求算法复杂度攻略:
1、用常数1取代运行时间中所有加法常数;
2、修改后的运行数函数中,只保留最高阶项;
3、如最高阶项存在且系数不是1,则去除该项的常数系数;
4、最后所得结果就是大O阶。
1、算法复杂度大类(攻略具体化)
a、常数阶;b、线性阶;c、平方阶(两个不同循环嵌套例子);d、对数阶…等
2、函数调用的时间复杂度分析
类似循环嵌套,遵循攻略计算即可!
最坏情况:算法时间复杂度需要花费的最长时间;一种保证,最重要的需求,通常的运行时间是指嘴还请况的运行时间。
平均情况:平均的运行时间,期望的运行时间。
3、算法的空间复杂度
存储负担~
可以考虑用空间换取时间;或时间换取空间。