第1章:数据结构与算法


本章目标

  1. 了解数据结构

  2. 了解算法的设计原则

本章内容

程序设计

什么是程序设计

程序设计=算法+数据结构

程序设计:为计算机处理问题编制一组指令集

算法:处理问题的策略

数据结构:问题的数学模型

程序设计的实质

对实际问题选择一个好的数据结构,加之设计一个好的算法。

数据处理的种类

数值数据:整数/实数。

非数值数据:图形/图像/声音。

数值计算

通常可以用一组线性或非线性的代数方程组或微分方程组来描述。

问题

已知:游泳池的长 len 和宽 wide,求面积 area

分析

  • 建模型
    • 问题涉及的对象:长len,宽wide,面积area
    • 对象之间的关系:area = len * wide
  • 设计求解问题的方法
  • 编程
1
2
3
4
5
6
7
8
9
10
11
public void GetArea()
{
Console.WriteLine("请输入长:");
int len=int.Parse( Console.ReadLine());
Console.WriteLine("请输入宽:");
int wide = int.Parse(Console.ReadLine());

int area=len*wide;

Console.WriteLine("面积是:"+area);
}

非数值计算

对具有一定关系的数据进行组织、管理

示例:学籍档案管理

示例:人机博弈

常用术语

  • 数据

    • 是信息的载体,是计算机操作的对象的总称
    • 所有能被输入到计算机中,且能够被计算机识别、存储、计算(处理)的符号集合
  • 数据元素

  • 数据项

  • 关键字

  • 数据对象

    • 是具有相同特征的数据元素的集合
    • 是数据的子集
  • 数据结构

    • 相互之间存在一定关系的数据元素的集合

    • 不同的“关系”构成不同的“结构”

    • 是相互之间存在着某种逻辑关系的数据元素的集合

数据结构

  • 数据结构的研究问题
    • 非数值数据之间的数据关系
    • 如何表示、如何存储、如何处理
  • 数据结构的地位
    • 计算机科学中的一门综合性专业基础课
    • 介于数学、计算机硬件、计算机软件之间的一门核心课程
  • 数据结构主要包括
    • 逻辑结构
    • 存储结构
    • 数据运算

提示:

通常习惯说的数据结构一般就是指的逻辑结构

逻辑结构

  • 是指从逻辑关系上描述数据
  • 与数据的存储无关,且独立于语言
  • 又称“抽象结构”
  • 逻辑结构按照数据元素之间的相互关系分为
    • 线性结构
      • 指有且仅有一个开始结点和一个终端结点,所有结点都最多只有一个直接前驱和直接后继
      • 常见的线性结构:
        • 线
        • 性表栈
    • 非线性结构
      • 指一个结点可能有多个直接前驱和直接后继
      • 常见的非线性结构

存储结构

  • 存储结构
    • 是指数据元素及其关系在计算机存储时如何表示
    • 依赖于语言
    • 又称为“物理结构”
  • 数据的存储结构要能够正确反映数据元素之间的逻辑关系
  • 按数据结构在计算机内存储方式划分
    • 顺序存储结构
      • 把逻辑上相邻的元素存储在物理位置相邻的存储单元中
      • 元素间的逻辑关系由存储单元的相邻关系来体现
    • 链式存储结构
      • 对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示
      • 特点:依次,未必连续
    • 散列存储结构
      • 通过构造散列函数,用函数的值来确定元素存放的地址
      • 元素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

本章总结

课后作业