1 / 66

数据结构

数据结构. 课程名称:数据结构 预修课程: C 语言, 高等数学 教材:1.《数据结构》( C 语言版)清华大学出版社 2.《数据结构题集》( C 语言版)清华大学出 版社 教师:吴志芳. 关于习题与实验题. 教材中习题放在每章结束,但学生在每周都应该完成与上课内容相应的部分小题 有精力的同学应该思考《数据结构题集》中未列为必做的练习,这会有助于理解课程内容 习题包括理论习题和上机实验题 实验题要求用 C 语言编写,并在计算机上调试通过. 参考书目 1. 数据结构 - 使用 C 语言 朱战力编著 西安交通大学出版社 2. 数据结构与算法

Download Presentation

数据结构

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. 数据结构 课程名称:数据结构 预修课程: C语言, 高等数学 教材:1.《数据结构》(C语言版)清华大学出版社 2.《数据结构题集》(C语言版)清华大学出 版社 教师:吴志芳

  2. 关于习题与实验题 • 教材中习题放在每章结束,但学生在每周都应该完成与上课内容相应的部分小题 • 有精力的同学应该思考《数据结构题集》中未列为必做的练习,这会有助于理解课程内容 • 习题包括理论习题和上机实验题 • 实验题要求用C语言编写,并在计算机上调试通过

  3. 参考书目 1.数据结构 -使用C语言 朱战力编著 西安交通大学出版社 2.数据结构与算法 许卓群等编著 高等教育出版社 3.数据结构与算法 -C++版 Adam Drozdek著 陈曙晖 译 清华大学出版社

  4. 第一章绪论 • 1.1 什么是数据结构 • 1.2 基本概念和术语 • 1.3 抽象数据类型的表示与实现 • 1.4 算法和算法分析

  5. 1.1 什么是数据结构 • 计算机解决问题的步骤 • 实际问题 --- 数学模型---算法---程序--- 结果 • 工程师 数学家 程序员 • 计算机的用途 • 科学计算(数值运算): 解方程(组), 函数求值, 概率统计等 • 非数值运算: 字符, 表格, 图象, 声音等

  6. 原始数据 结果数据 程序 计算机的用途---数值运算 • 水库大坝的应力计算 • 预报人口增长 • 天气预报

  7. 计算机的用途---数值问题例已知:游泳池的长len和宽wide,求面积area计算机的用途---数值问题例已知:游泳池的长len和宽wide,求面积area ◆建模型:问题涉及的对象:游泳池的长len 宽wide,面积area;对象之间的关系:area=lenwide ◆设计 求解问题的方法 ◆编程 main ( ) { int len, wide ,area ;scanf (“%d %d%\n”, &l,&w);area=len*wide ;printf (“area=%d”,area); }

  8. 计算机的用途---非数值运算 • 书目检索系统

  9. …….. …….. …... …... …... …... • 人机对奕问题

  10. C D AB AC AD B BA BC BD E DA DB DC A EA EB EC ED • 多叉路口交通灯管理问题 • 有连线的节点用不同的颜色标记, 表示不能同时通行. • 要求使用的颜色数尽可能少, 以使减少等待时间. • 图论中的四色问题.

  11. 田径赛的时间安排问题 田径赛的时间安排问题(无向图的着色问题) 设有六个比赛项目,规定每个选手至多可参加三个项目,有五人报名参加比赛(如下表所示)设计比赛日程表,使得在尽可能短的时间内完成比赛。

  12. 田径赛的时间安排问题 (1)设用如下六个不同的代号代表不同的 项目: • 跳高 跳远 标枪 铅球 100米 200米 • A B C D E F • (2)用顶点代表比赛项目 • 不能同时进行比赛的项目之间连上一条边。 • (3)某选手比赛的项目必定有边相连(不能同时比赛)。

  13. 只需安排四个单位时间进行比赛 A B F E C D

  14. 数据结构的定义 • 描述非数值计算问题的模型是--- • 如表、树、图之类的数据结构 • 数据结构是--- • 研究计算机的操作对象(数据)以及它们之间的关系和操作等的学科.

  15. 综合性的专业基础课 《数据结构》在计算机科学中所处的地位

  16. 课程目的 • 能够分析研究计算机加工的对象的特性,获得其逻辑结构,根据需求,选择合适存贮结构及其相应的算法; • 学习一些常用的算法; • 复杂程序设计的训练过程,要求编写的程序结构清楚和正确易读; • 初步掌握算法的时间分析和空间分析技术;

  17. 1.2 基本概念和术语 • 数据:计算机程序处理的符号的总称。 • 数据元素:数据的基本单位。 • 数据记录与数据项:数据的不可分割的最小单位。 • 数据对象:性质相同的数据元素的集合。 • 数据结构:相互间存在一种或多种关系的数据元素的集合。 • 数据类型与抽象的数据类型

  18. 数据(Data) 能够被计算机加工的对象,或者能够被计算机输入、存储、处理和输出的一切信息。 在计算机科学中,数据是指能够输入到计算机中,并且能够被计算机程序处理的符号的总称。

  19. 数据处理 (Data Processing) 对数据进行检索、插入、删除、合并、拆分、排序、统计、简单计算、转换、输入、输出等的操作过程。 

  20. 数据元素(Data Element) 简称“元素”,是数据基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 如:字符串的数据元素是其中的每个字符 数组的数据元素是其中的每一个成分 文件的数据元素是其中的每一个记录 

  21. 数据记录(Data Record) 简称“记录”,它是数据处理领域组织数据的基本单位。 数据中的每个数据元素在许多应用场合被组织成记录的结构。

  22. 姓 名学 号班 号性别出生日期入学成绩 年 月 日 数据记录可以由数据项(Item)构成。 描述一个学生的数据记录 例如: 其中每个款项称为一个“数据项” 它是数据结构中讨论的最小单位 简单数据项 称之为组合数据项 

  23. 数据结构(Data Structures) 有一个特性相同的数据元素的集合,如果在数据元素之间存在一种或多种特定的关系,则称为一个数据结构。 具有结构的数据元素的集合 简单的说是指数据以及相互之间联系

  24. 逻辑结构 数据元素之间的逻辑关系。 根据数据元素之间的逻辑结构可将数据结构分为四类: 集合——同属于一个集合。 线性结构——一个对一个。如,线性表、栈、队列。 树形结构——一个对多个。如,树。 图状结构——多个对多个,如,图。

  25. 物理结构 存储结构 具有某种逻辑结构的数据在计算机存储器中的存储方式(存储映象)。 顺序存储结构 用一组地址连续的存储单元依次存放数据元素, 数据元素之间的逻辑关系通过元素的地址直接反映。 链式存储结构 用一组地址任意的存储单元依次存放数据元素, 数据元素之间的逻辑关系通过指针间接地反映。

  26. 刘晓光 男 汉 16 … 马广生 男 回 17 … 王 民 男 壮 21 … … … … … … 张玉华 女 汉 25 … … d1 d2 d3 d4… d30 a1 a2 a4 a30 a3 例 姓 名 性 别 民 族 年 龄 其 他 a1 a2 a3  a30 逻辑结构 线性结构(线性表) 存储结构 1. 顺序存储结构

  27. d1 d2 d3 d4 a2 a4 a3 a1 list … a1 a2 a3 a30 ∧ d1 d3 d5 d4 2. 链式存储结构

  28. 逻辑结构 存储结构 算法 数据结构课程研究的主要内容 1. 研究数据元素之间的客观联系。 2.研究具有某种逻辑关系的数据在计算机 存储器内的存储方式。 3. 研究如何在数据的各种结构(逻辑的和物理的)的基础上对数据实施一系列有效的基本操作。

  29. 数据结构 逻辑结构:线性结构(一对一)linearity (数据之间的 树形结构(一对多)tree 相互联系) 图状或网状结构(多对多)graph 集合结构(同属一个集合)set 物理结构(存储结构): (在计算机中的存储方式) 顺序存储(利用在存储器中相对 位置之间的特定关系) 链式存储(利用附加的“指针”) 索引、散列等

  30. 逻辑结构和物理结构 • 算法的设计取决于选定的逻辑结构 • 算法的实现依赖于采用的存储结构

  31. 数据结构的数学定义 • 数据结构是一个二元组 • Data_Structure = (D,S)D –数据元素的有限集合S –定义在D上的关系的有限集合 例如 • Complex = (C,R) • C = {(c1,c2)| c1,c2是实数} • R = {P|P是定义在C上的关系,<c1,c2>表示c1是实部,c2是虚部} 

  32. 数据类型与抽象的数据类型 • 数据类型(Data Type): • 值的集合以及定义在这个集合上的一组操作。 • 例如: C语言中的整数类型 • 抽象数据类型(ADT) • 数学模型以及定义在该模型上的一组操作。 • 与其在计算机中的表示和实现无关。 • ADT可用三元组表示:(D,S,P) D – 数据对象; S – D上的关系; P – 对D的基本操作集

  33. 抽象数据类型的定义格式: • ADT抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义>}ADT抽象的数据类型名 • 基本操作的定义格式为:基本操作名(参数表)初始条件:<初始条件描述>操作结果:<操作结果描述>

  34. 抽象数据类型三元组的定义 • ADT Triplet{ • 数据对象:D = {e1,e2,e3 | e1,e2,e3属于Elemset(定义了关系的某个集合)} • 数据关系:R1 = {<e1,e2>|<e2,e3>} • 基本操作: • InitTriplet(&T,v1,v2,v3) • 初始条件: • 操作结果: 构造三元组T,元素e1,e2和e3分别被赋予参数v1,v2和v3的值。

  35. 抽象数据类型三元组的定义(2) • DestroyTriplet(&T) • 初始条件: 三元组T已经存在。 • 操作结果: 销毁三元组T。 • Get(T,i,&e) • 初始条件: 三元组T已经存在,1<=i<=3。 • 操作结果: 用e返回三元组T的第i个元素。 • Put(&T,i,e) • 初始条件: 三元组T已经存在,1<=i<=3。 • 操作结果: 用e值取代三元组T的第i个元素。

  36. 抽象数据类型三元组的定义(3) • IsAscending(T) • 初始条件: 三元组T已经存在。 • 操作结果: 如果三元组T的三个元素按升序排列,则返回TRUE; 否则返回FALSE。 • IsDescending(T) • 初始条件: 三元组T已经存在。 • 操作结果: 如果三元组T的三个元素按降序排列,则返回TRUE; 否则返回FALSE。

  37. 抽象数据类型三元组的定义(4) • Max(T,&e) • 初始条件: 三元组T已经存在,。 • 操作结果: 用e返回三元组T的最大值。 • Min(T,&e) • 初始条件: 三元组T已经存在,。 • 操作结果: 用e返回三元组T的最小值。 }ADT Triplet 

  38. 1.3抽象数据类型的表示与实现 • 类C语言(作了扩充和修改)的表示 • 如:预定义常量和类型 • #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 typedef int Status

  39. 三元组基本操作实现---举例 Status Get(Triple T, int i, Elemtype *e) // 初始条件: 三元组T已经存在,1<=i<=3。 // 操作结果: 用e返回三元组T的第i个元素。 { if (i<1 || i>3) return ERROR; *e=T[i-1]; return OK; }

  40. 1.4算法和算法分析1.4.1 算法 • 算法(Algorithm):对特定问题求解步骤的一种描述. • 算法的五个重要特性: • 1)有穷性 • 2)确定性 • 3)可行性 • 4)输入 • 5)输出

  41. (1)有穷性对于任意一组合法输入值,在执行有穷步骤之后一定能结束。即:算法中的每个步骤都能在有限时间内完成;(1)有穷性对于任意一组合法输入值,在执行有穷步骤之后一定能结束。即:算法中的每个步骤都能在有限时间内完成; (2)确定性对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径;

  42. (3)可行性算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之;(3)可行性算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之; (4)有输入作为算法加工对象的量值,通常体现为算法中的一组变量。有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中; (5)有输出它是一组与“输入”与确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。

  43. 算法描述描述一个算法可以用文字叙述,也可以采用传统的流程图、N-S图或PAD图。但在计算机实现中,最终必须采用一种程序设计语言编写为程序。算法描述描述一个算法可以用文字叙述,也可以采用传统的流程图、N-S图或PAD图。但在计算机实现中,最终必须采用一种程序设计语言编写为程序。 例题:从 n 个整数元素中查找出最大值下面分 别用流程图、文字以及程序设计语言对其描述

  44. 开始 为 n 个元素a 1-a n 输入数值 (一)流程图 a 1 x 2  i N i <= n Y N a i > x 输出 x 结束 a i  x i+1  i

  45. (二)文字描述 • 给n 个元素a 1-a n输入数值 • 把第一个元素a 1赋给用于保存最大值元素的变量x • 把表示下标的变量i赋初值2 • 如果i <= n则向下执行,否则输出最大值x 后结束算法 • 如果a i > x则将a i赋给x,否则不改变x的值,这使得x 始终保存着当前比较过的所有元素的最大值 • 使下标i 增1,以指示下一个元素 • 转向(4)步继续执行

  46. (三) C语言描述 const n=10; void main(void) { int i, x, a[n]; //用a[0]-a[n-1]保存元素a1-an printf(“请输入10个整数:”); for (i =0; i<n; i++) scanf(“%d”,&a[i]); x=a[0]; i=1; while (i<n) { if (a[i]>x) x=a[i]; i++; } printf(“10个整数中最大值为:%d”,x); }

  47. 1.4.2 算法设计的要求 • 算法应达到的目标 • 1)正确性 • 2)可读性 • 3)健壮性 • 4)效率与低存贮量

  48. 1.4.3 算法效率的度量 (1) 事后统计法 (2) 事前分析估算法 • 用高级语言编写的程序运行的时间主要取决于如下因素: • 算法; • 问题规模; • 使用语言:级别越高,效率越低; • 编译程序; • 机器;

  49. 1.4.3 算法效率的度量 • 特定算法“运行工作量”的大小只依赖于问题的规模(通常用整数n表示),或者说是问题规模的函数。 • 算法主要由程序的控制结构(顺序,分支,循环)和原操作(必须的操作)构成,算法的时间主要取决于两者。 算法的执行时间= 原操作(i)的执行次数×原操作(i)的执行时间 算法的执行时间 与 原操作执行次数之和成正比

  50. 算法度量:从算法中选取一种对于所研究的问题来说是 基本操作 的原操作,以该基本操作 在算法中重复执行的次数 作为算法运行时间的衡量准则。

More Related