数据结构与算法教程(C++版)第一章(绪论)知识点整理

1.1什么是数据结构?

数据结构——指相互之间存在着一定关系的数据元素的集合
研究范畴——主要是非数值计算问题的操作对象及其它们之间的关系以及在计算机中的表示和实现
程序设计=数据结构+算法

1.2数据结构的基本概念

1.2.1数据

数据——是客观事物的符号(数、字符、等)表示,是指所有能被输入到计算机中,且能被计算机处理的符号的集合
数据划分——数值性数据(如整数、实数和复数等等)、非数值性数据(如文字、图形和语音等等)

1.2.2数据元素、数据项、数据对象

数据元素——指某种数据结构中能独立存在的数据单位,是数据的基本单位,数据元素又称为元素、结点、记录
数据项——数据项是对客观事物某一方面特性的数据描述,一个数据元素可以由若干数据项(Data Item)组成
数据对象——是性质相同的数据元素的集合,是数据的一个子集(例:一个二维表是一个数据对象,它是 记录的集合)
数据>数据对象>数据元素>数据项

1.2.3数据结构

数据结构——指相互之间存在着一定关系的数据元素的集合
形式定义为二元组——Data_Structures = (D, S)
D 是一个数据元素的集合,S 是 定义在D中的数据元素之间的关系的有限集合
例:部门的上级领导下级的数据结构为a 领导 b , a 领导 c,b 领导 d , b 领导 e。如图所示
在这里插入图片描述
其数据结构可描述为 T = (D, R )
D是数据元素的集合 D={a,b,c,d,e}
R是D上的关系的集合 R={ P } P ={<a,b>,<a,c>,<b,d>,<b,e>}
数据结构在计算机中的表示称为物理结构或存储结构
物理结构——指数据的逻辑结构在计算机中的存储形式
逻辑结构——指数据对象中元素之间的相互关系
物理结构划分
1.顺序存储结构——所有元素存放在一片连续的存储单元中,逻辑上相邻的元素存放到计算机内存仍然相邻
2.链式存储结构——所有元素存放在可以不连续的存储单元中,但元素之间的关系可以通过地址确定,逻辑上相邻的元素存放到计算机内存后不一定是相邻的
逻辑结构划分
1.集合——结构中的数据元素除了“同属于一个集合”外,没有其它关系
2.线性结构——结构中的数据元素之间存在一对一的关系
在这里插入图片描述
3.树状结构——结构中的数据元素之间存在一对多的关系
在这里插入图片描述
4.图状结构——结构中的数据元素之间存在多对多的关系
在这里插入图片描述
一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构

1.3数据类型

1.3.1数据类型

数据类型——一组性质相同的值的集合, 以及定义于这个值集合上的一组操作的总称
如:C语言中有如下数据类型
char(字符型)、int(整型)、float(浮点型)、double(双精度型)

1.3.2抽象数据类型(ADT)

抽象数据类型——由用户定义,用以表示应用问题的数据模型以及定义在此数学模型上的一组操作
两个重要特征
抽象性—— 用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)
封装性——将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节

1.3.3C++的类和对象

C++主要通过类和对象支持面向对象程序设计技术,C++的类在本质上就是C语言中结构体的扩充,对象实质是类型为类的变量,在类中不但可以包含数据成员,还可以包含函数成员,并且规定了对类中成员的3级访问权限: public, private和protected
数据结构的主要运算:
⑴ 建立(Create)一个数据结构
⑵ 消除(Destroy)一个数据结构
⑶ 从一个数据结构中删除(Delete)一个数据元素
⑷ 把一个数据元素插入(Insert)到一个数据结构中
⑸ 对一个数据结构进行访问(Access)
⑹ 对一个数据结构(中的数据元素)进行修改(Modify)
⑺ 对一个数据结构进行排序(Sort)
⑻ 对一个数据结构进行查找(Search)

1.4算法和算法分析

1.4.1算法

算法——是对特定问题求解方法(步骤)的一种描述,在计算中表现为指令的有限序列,其中每一条指令表示一个或多个操作
性质
1.正确性(Correctness ): 算法应满足具体问题的需求,能够得到问题的正确答案
2.可读性(Readability): 算法应容易供人阅读和交流。可读性好的算法有助于对算法的理解和修改
3.健壮性(Robustness): 算法应具有容错处理。当输入非法或错误数据时,算法应能适当地作出反应或进行处理,而不会产生莫名其妙的输出结果
4.通用性(Generality): 算法应具有一般性 ,即算法的处理结果对于一般的数据集合都成立
5.效率与存储量需求: 效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。一般地,这两者与问题的规模有关

1.4.2算法分析

算法分析
高级语言编写的程序运行时消耗的时间取决于
1.编译产生的代码质量(软件决定)
2.机器执行指令的速度(硬件决定)
3.算法的策略与方法
4.问题的输入规模
定性分析
1.时间复杂度:算法所需时间和问题规模的函数,记为 T(n)。算法时间度量为:T(n)=O(f(n))。O(f(n))称为算法的渐进时间复杂度,或简称为时间复杂度
在这里插入图片描述
乘法规则 针对嵌套程序段
T (n, m) = T1 (n) * T2 (m) = O(f (n)*g (m))

加法规则 针对并列程序段
T(n, m) = T1 (n) + T2 (m) = O(max (f (n), g (m)))

2.空间复杂度:算法所需空间和问题规模的函数。记为 S(n)。算法空间度量为:S(n)=O(f(n))。O(f(n))称为算法的空间复杂度
一维数组a[n]: 空间复杂度 O(n)
二维数组a[n][m]: 空间复杂度 O(n*m)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值