第1章:数据结构与算法
第1章:数据结构与算法
本章目标
了解数据结构
了解算法的设计原则
本章内容
程序设计
什么是程序设计:
程序设计=算法+数据结构
程序设计:为计算机处理问题编制一组指令集
算法:处理问题的策略
数据结构:问题的数学模型
程序设计的实质:
对实际问题选择一个好的数据结构,加之设计一个好的算法。
数据处理的种类
数值数据:整数/实数。
非数值数据:图形/图像/声音。
数值计算
通常可以用一组线性或非线性的代数方程组或微分方程组来描述。
问题:
已知:游泳池的长 len 和宽 wide,求面积 area
分析:
- 建模型
- 问题涉及的对象:长len,宽wide,面积area
- 对象之间的关系:area = len * wide
- 设计求解问题的方法
- 编程
1 | public void GetArea() |
非数值计算
对具有一定关系的数据进行组织、管理
示例:学籍档案管理
示例:人机博弈
常用术语
数据
- 是信息的载体,是计算机操作的对象的总称
- 所有能被输入到计算机中,且能够被计算机识别、存储、计算(处理)的符号集合
数据元素
数据项
关键字
数据对象
- 是具有相同特征的数据元素的集合
- 是数据的子集
数据结构
相互之间存在一定关系的数据元素的集合
不同的“关系”构成不同的“结构”
是相互之间存在着某种逻辑关系的数据元素的集合
数据结构
- 数据结构的研究问题
- 非数值数据之间的数据关系
- 如何表示、如何存储、如何处理
- 数据结构的地位
- 计算机科学中的一门综合性专业基础课
- 介于数学、计算机硬件、计算机软件之间的一门核心课程
- 数据结构主要包括
- 逻辑结构
- 存储结构
- 数据运算
提示:
通常习惯说的数据结构一般就是指的逻辑结构
逻辑结构
- 是指从逻辑关系上描述数据
- 与数据的存储无关,且独立于语言
- 又称“抽象结构”
- 逻辑结构按照数据元素之间的相互关系分为
- 线性结构
- 指有且仅有一个开始结点和一个终端结点,所有结点都最多只有一个直接前驱和直接后继
- 常见的线性结构:
- 线
- 性表栈
- 非线性结构
- 指一个结点可能有多个直接前驱和直接后继
- 常见的非线性结构
- 树
- 图
- 线性结构
存储结构
- 存储结构
- 是指数据元素及其关系在计算机存储时如何表示
- 依赖于语言
- 又称为“物理结构”
- 数据的存储结构要能够正确反映数据元素之间的逻辑关系
- 按数据结构在计算机内存储方式划分
- 顺序存储结构
- 把逻辑上相邻的元素存储在物理位置相邻的存储单元中
- 元素间的逻辑关系由存储单元的相邻关系来体现
- 链式存储结构
- 对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示
- 特点:依次,未必连续
- 散列存储结构
- 通过构造散列函数,用函数的值来确定元素存放的地址
- 元素ai 的地址 = Hash(ai)
- 索引存储结构
- 使用附加的索引表
- 索引表中的每一项称为索引项
- 顺序存储结构
数据运算
- 数据运算通常定义在数据的逻辑结构上
- 运算的具体实现要在存储结构上进行
- 对数据的增加、删除、修改、查询、排序都是数据运算
数据类型
- 存储结构的描述方法随编程环境的不同而不同
- 当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述
- C#中的常用数据类型
- 整型:int
- 字符型:char
- 字符串型:string
- 布尔型:bool
- 双精度浮点型:double
示例:
当以三个带有次序关系的整数表示一个长整数时,可以利用c#中的整型数组
示例:
定义“学生”类
算法
- 是对特定问题具体求解方法的一种描述
- 是指令的有限序列,其中每一条指令表示一个或者多个操作
- 它与数据结构是互相依赖、互相联系的
生活中的算法:
程序中的算法:
实现两个正整数 a, b 交换的算法
算法的基本特征:
- 有穷性
- 对于任意一组合法输入值,在执行有限步骤之后一定能结束
- 确定性
- 对于每种情况下所应执行的操作,在算法中都有确定的规定,不存在二义性
- 可行性
- 算法描述的操作,都可以通过已经实现的基本操作运算,执行有限次实现
- 输入
- 一个算法有零个或者多个输入,这些输入取自于某个特定的对象集合
- 输出
- 是一组与“输入”确定关系的量值,是算法进行信息加工后得到的结果
算法与程序的区别:
- 算法可以用多种方法描述
- 自然语言
- 形式语言
- 计算机设计语言
- 计算机程序是对一个算法使用某种程序设计语言的具体实现
算法的应用
问题:
100元钱买100只鸡,母鸡每只5元,公鸡每只3元,小鸡3只1元,问共可以买多少只母鸡、多少只公鸡、多少只小鸡?
分析:
设母鸡、公鸡、小鸡各i , j , k只。则有方程
i + j + k = 100
5i + 3j + k/3=100
解答1:
解答2:
解答3:
解答4:
本章总结
略
课后作业
略
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 广创科技教育-Blog!
评论

































