1 / 33

经管类专业 IT 支撑课程群

经管类专业 IT 支撑课程群. —— 数据结构. 山东财经大学 管理科学与工程学院 李玲玲 lilingling_77@126.com. 什么是数据结构. 分析问题. 提取操作对象. 抽象数学模型. 找出操作对象之间的关系. 用数学语言描述.  数据结构. 计算机解题步骤. 设计算法. 编程、调试、运行. 8521088 计算机系 8522105 国贸系 8523101 法学系 8523150 工商系 8525789 会计系 8528136 统计系.

dexter
Download Presentation

经管类专业 IT 支撑课程群

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 经管类专业 IT支撑课程群 ——数据结构 山东财经大学 管理科学与工程学院 李玲玲 lilingling_77@126.com

  2. 什么是数据结构 分析问题 提取操作对象 抽象数学模型 找出操作对象之间的关系 用数学语言描述 数据结构 计算机解题步骤 设计算法 编程、调试、运行

  3. 8521088 计算机系 8522105 国贸系 8523101 法学系 8523150 工商系 8525789 会计系 8528136 统计系 法学系 8523101 国贸系 8522105 工商系 8523150 计算机系 8521088 会计系 8525789 统计系 8528136 例1:计算机电话号码查询系统 线性结构 线性表 操作对象:{单位名,号码} 关 系:线性关系 算 法:查询、插入、修改、删除 ……

  4. 例2:计算机和人对弈问题。 非线性结构 树 操作对象:格局(棋盘状态) 关 系:非线性关系(由比赛规则决定)

  5. C D AC AD AB B BA BC BD E A DC DB ED DA EC EA EB 例3:多叉路口交通灯的管理问题。 在多叉路口需设几种颜色的交通灯才能使车辆相互之间不碰撞,又能达到最大流通量。 非线性结构 图 操作对象:通路 关 系:非线性关系(由问题的要求决定)

  6. 课程介绍 • 课程地位 • 是一门综合的专业基础课程 • 对于经管类人才 • 数据处理 • MIS的开发设计及相关软件的二次开发

  7. 课程介绍 • 课程设计理念 • 突出经管类专业特色,注重高层应用 • 坚持理论融入实践的一体化教学,不断改革教学内容 • 突出实践环节,注重逻辑思维能力和模型处理能力的培养 • 注重课程体系建设,与其他课程相互渗透

  8. 课程介绍 • 数据结构的发展 • 起源及发展 • 数据结构与计算机语言

  9. 课程内容 • 数据结构与算法概论 • 线性表 • 栈与队列 • 树和图 • 排序与查找 • 堆与优先队列

  10. 第1章 数据结构与算法概论 1.1 算法及其复杂性的概念

  11. 1.1.1 算法与程序 • 算法(Algorithm) • 算法的性质 (1) 输 入 (2) 输 出 (3) 确定性 (4) 有限性

  12. 1.1.1 算法与程序 • 程序(Program) • 程序是算法用某种程序设计语言的具体实现。 • 程序与算法 • 程序可以不满足算法的性质(4),即不满足有限性。 • 例如操作系统

  13. 1.1.2 算法复杂度的概念 • 算法复杂性 • 算法所需要的计算机资源。 • 空间资源 • 时间资源 • 算法的时间复杂性 T(n)和空间复杂性S(n) • 其中n是问题的规模(输入大小)

  14. 1.1.3 算法复杂性的渐进性态 • 渐近上界记号O • O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0 有:0  f(n) cg(n) }

  15. 1.1.3 算法复杂性的渐进性态 • 对所有n 1有3n 4n,从而3n=O(n) • 当n 1时有n+1024 1025n,从而n+1024=O(n) • 当n 10时有2n2+11n-10  3n2,从而 2n2+11n-10=O(n2)

  16. 例: 两个 n × n 的矩阵相乘 • void Mult_matrix( int c[][], int a[][], int b[][], int n){// a、b 和 c 均为 n 阶方阵,且 c 是 a 和 b 的乘积for(i=0;i< n;i++) n for (j=0;j<n;j++) n2 { c[i][j]=0; n2 for (k=0;k< n; k++) n3 c[i][j]=c[i][j]+a[i][k]*b[k][j]; n3 }}// Mult_matrix 算法的时间复杂度为O (n3)

  17. 数据结构的基本概念 数据结构与抽象数据类型

  18. 1.2 数据结构与抽象数据类型 • 数据结构 • 数据之间的逻辑关系以及数据在计算机中的存储方式。 • 抽象数据类型 • 是描述数据结构的理论工具 • 是一个数据模型及定义在该模型上的一组运算构成的整体。

  19. 数据结构的基本概念 • 数据(Data) • 数据是个集合,可用集合的表示方法来写: • 数据={ x | x 是计算机操作的对象} • 数据元素(Data Element): (也称结点) • 是数据(集合)中的一个“个体”,是数据的基本单位,在计算程序中通常作为一个整体进行考虑和处理。 • 数据项(data item): • 是数据结构中讨论的“最小单位”

  20. 数据结构的基本概念 • 数据对象(Data Object): • 性质相同的数据元素的集合。 • 是数据的一个子集。 • 数据结构(Data Structure): • 是相互之间存在一种或多种特定关系的数据元素的集合。 • 结构: • 数据元素之间的相互关系。

  21. 数据结构的基本概念 集合: 数据元素除了同属于一种类型 外,别无其它关系。 线性结构:一对一。 四类基本结构 树型结构:一对多。 图状结构或网状结构:多对多。

  22. 抽象数据类型 (Abstract Data Type,ADT): 数据结构 + 定义在此结构上的一组操作。 数学模型 + 定义在该模型上的一组操作。 抽象数据类型 (Abstract Data Type) 的描述方法: 抽象数据类型可用 (D, S, P) 三元组表示,其中,D是数据对 象,S 是 D上的关系集,P是对 D的基本操作集。 ADT 抽象数据类型名{数据对象:〈数据对象的定义〉数据关系:〈数据关系的定义〉基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名 用伪码 (不真正执行的符号) 描述

  23. 抽象数据类型的定义 • 约定数据模型及其名字 • 约定运算及其名字 • 明确各运算的参数及功能

  24. 举例 • 抽象数据类型——整型 • 其内涵为一定范围的自然数集合,及定义在该集合上的加减乘除及取模、比较大小操作。 • 抽象数据类型——学生 • 其内涵为一定范围的人的集合,及定义在该集合上的插入、删除、查找等操作。 • 抽象数据类型可看作某一满足特定关系的数据对象以及对它的操作。

  25. 举例:抽象数据类型“复数”的定义 ADT Complex { 数据对象:D = {e1, e2 | e1, e2 RealSet } 数据关系:R1 = {<e1, e2> | e1是复数的实部,e2是复数的虚部 } 基本操作:Complex( &Z, v1, v2 ) 操作结果:构造复数 Z,其实部和虚部分别被赋以参数 v1 和 v2 的值。 ~Complex( &Z) 初始条件:复数 Z 已存在。 操作结果:复数 Z 被销毁。 Re( Z, &realPart ) 初始条件:复数 Z 已存在。操作结果:用realPart 返回 Z 的实部值。 Im( Z, &ImagPart ) 初始条件:复数 Z 已存在。操作结果:用ImagPart 返回 Z 的虚部值。 +,-,*,/ :操作结果:返回复数运算的结果。 } ADT Complex 用两个实数来表示复数,将复数定义为两个实数的有序对,并约定实部是前驱,虚部是后继。

  26. C++语言回顾 ——用C++实现表示复数的抽象数据类型

  27. 用C++的类实现表示复数的抽象数据类型 • class Complex{private: double re_, im_; public: Complex( ){} //构造函数 ~Complex( ){} //析构函数 Complex(double x, double y){re_=x; im_=y;} //构造函数double re( ) const{ return re_; } //返回实部double im( ) const{ return im_; } //返回虚部

  28. friend Complex operator+(const Complex&, const Complex&); • friend Complex operator+(const double&, const Complex&); • friend Complex operator+(const Complex&, const double&); • friend Complex operator-(const Complex&, const Complex&); • friend Complex operator-(const double&, const Complex&); • friend Complex operator-(const Complex&, const double&);

  29. friend Complex operator*(const Complex&, const Complex&); • friend Complex operator*(const double&, const Complex&); • friend Complex operator*(const Complex&, const double&); • friend Complex operator/(const Complex&, const Complex&); • friend Complex& operator/(const Complex&, const double&); • friend Complex& operator/(const double&, const Complex&); • };

  30. 重载加法运算 • Complex operator+ (const Complex& x, const Complex& y) • { • Double zre=x.re()+y.re(); • Double zim=x.im()+y.im(); • Complex z(zre,zim); • Return z; • }

  31. Complex operator+(const double& x, const Complex& y) • { • Double (); • Doublezim=y.imzre=x+y.re (); • Complex z(zre,zim); • Return z; • }

  32. Complex operator+(const Complex& x, const double& y) • { • Double zre=x.re()+y; • Doublezim=x.im(); • Complex z(zre,zim); • Return z; • }

  33. 作业 写出“学生”的ADT并用C++实现,然后分析各种操作的时间复杂度。

More Related