1 / 35

数 据 结 构

数 据 结 构. 第一次直播. 清华大学 殷人昆. 中央电大 徐孝凯. 为什么要学习数据结构 ?. 它研究了计算机需要处理的数据对象和对象之间的关系。 它刻画了应用中涉及到的数据的逻辑组织。 它描述了数据在计算机中如何存储、传送、转换。. 主要讨论哪几种数据结构?. 从传统的观点来看 数据的逻辑结构 线性结构 非线性结构. 线性结构. A. B. C. D. E. F. 非线性结构. A. A. D. B. C. C. D. E. G. B. E. 数据的物理结构 顺序结构 链表结构 散列结构

ferrol
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. 据 结 构

  2. 第一次直播 清华大学 殷人昆 中央电大 徐孝凯

  3. 为什么要学习数据结构? • 它研究了计算机需要处理的数据对象和对象之间的关系。 • 它刻画了应用中涉及到的数据的逻辑组织。 • 它描述了数据在计算机中如何存储、传送、转换。

  4. 主要讨论哪几种数据结构? • 从传统的观点来看 • 数据的逻辑结构 • 线性结构 • 非线性结构

  5. 线性结构 A B C D E F 非线性结构 A A D B C C D E G B E

  6. 数据的物理结构 • 顺序结构 • 链表结构 • 散列结构 • 索引结构 • 在该数据结构上的操作

  7. 从面向对象的观点来看 • 应用级的类与关系 • 分类 一般与特殊 • 组装 整体与部分 • 关联 包容与实体 • 实现级的类与关系

  8. 消息 消息通信 refers to • 组装 一个类的实例是另一 个类的实现部分 is part of • 继承 从既存类定义新类 • is a • is kind of • is an implementation of

  9. 包容 (container) 逆波兰表示 计算器 is a is part of 栈 is an implementation of is an implementation of 基于数组的栈 基于链表的栈

  10. 为什么选用面向对象及C++语言讲述数据结构? • PASCAL与C描述是面向过程的。 • C++描述兼有面向过程与面向对象的特点。 • Java描述是面向对象的。 • 用面向对象及C++描述与国际接轨,是市场需要。

  11. 学习数据结构需要注意些什么? • 知识方面 • 系统掌握基本数据结构的特点及其不同实现。 • 了解并掌握各种数据结构上主要操作的实现及其性能(时间、空间)的分析。

  12. 技能方面 • 掌握各种数据结构的使用特性,在算法设计中能够进行选择。 • 掌握常用的递归、回溯、迭代、递推等方法的设计 • 掌握自顶向下、逐步求精的程序设计方法。

  13. 算法编制时需要注意些什么? • 正确性 前置(先决)条件、后置条件 • 可读性 清晰性、一致性、简明性 结构性、模块性 • 容错性

  14. 试编写一个函数计算 n!*2n的值,结果存放于数组 A[arraySize]的第 n个数组元素中 (0 narraySize) • 若设计算机中允许的整数的最大值为 maxInt,则当 n > arraySize或者对于某一个k (0 kn),使得k!*2k > maxInt时,应按出错处理。

  15. 可有如下三种不同的出错处理方式: • 用 cerr <<及 exit (1)语句来终止执行并报告错误; • 用返回整数函数值0, 1来实现算法,以区别是正常返回还是错误返回; • 在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某中错误返回。

  16. #include "iostream.h" #definearraySize 100 #defineMaxInt 0x7fffffff intcalc ( intT[ ], intn ) { inti, value = 1; if ( n != 0 ) {

  17. for ( i = 1;i < n;i++) { value *= i * 2; if ( value > MaxInt / n / 2 ) return 0; //直接判断i!*2i > MaxInt //是危险的 }

  18. value *= n * 2; } T[n] = value; // n!*2n  T[n] return 1; } voidmain ( ) { intA[arraySize], i;

  19. for ( i = 0;i < arraySize;i++ ) if ( !calc ( A, i ) ) { cout << "failed at " << i << endl; break; } }

  20. 第二章、第三章和第四章主要涉及到那些问题?第二章、第三章和第四章主要涉及到那些问题? • 第二章主要介绍数组及其应用,第三章主要介绍链表,第四章主要介绍栈、队列与优先级队列。它们都属于线性结构。

  21. 数组与链表属于实现级数据结构,可作为顺序表、多项式、各种矩阵、字符串的存储表示。数组与链表属于实现级数据结构,可作为顺序表、多项式、各种矩阵、字符串的存储表示。 • 栈、队列和优先级队列是由(顺序)表派生出来的,是限制存取点的表。

  22. 这几章涉及的知识点和需要掌握的重点是什么?这几章涉及的知识点和需要掌握的重点是什么? • 第一章 基本概念 • 第二章 数组及其应用 • 第三章 链表及其应用 • 第四章 栈与队列

  23. 第一章涉及的知识点 • 什么是数据与数据结构 • 抽象数据类型及面向对象概念 • 数据类型; • 数据抽象与抽象数据类型; • 面向对象的概念 • 用于描述数据结构的语言

  24. 数据结构的抽象层次 • 算法的性能分析与度量 • 算法的性能标准; • 算法的后期测试; • 算法的事前估计; • 空间复杂度度量; • 时间复杂度度量;

  25. 考核要求 • 理解:数据结构概念 • 理解:数据结构的抽象层次 • 理解:抽象数据类型概念 • 理解:面向对象概念 • 理解:算法的定义及算法的特性 • 掌握:算法性能分析与度量方法

  26. 第二章涉及的知识点 • 作为抽象数据类型的数组 • 数组的定义和初始化; • 作为抽象数据类型的数组; • 顺序表 • 顺序表的定义和特点 • 顺序表的类定义

  27. 顺序表的查找、插入和删除 • 使用顺序表的事例 • 字符串 • 字符串的抽象数据类型; • 字符串操作的实现; • 字符串的模式匹配

  28. 考核要求 • 理解:数组的抽象数据类型定义 • 理解:顺序表的定义方式及实现 • 掌握:顺序表作为集合的简单操作 • 理解:字符串的定义及实现 • 综合应用:应用字符串实现简单的文本编辑中的操作

  29. 第三章涉及的知识点 • 单链表 • 单链表的结构和类定义; • 单链表中的插入与删除; • 带表头结点的单链表; • 用模板定义的单链表类; • 静态链表

  30. 循环链表 • 循环链表的类定义 • 用循环链表解约瑟夫问题; • 多项式及其相加 • 多项式的类定义 • 多项式的加法 • 双向链表

  31. 考核要求 • 理解:单链表的定义及实现 • 理解:循环链表的定义及实现 • 理解:双向链表的定义及实现 • 理解:多项式类的定义及其加法运算

  32. 第四章涉及的知识点 • 栈 • 栈的抽象数据类型; • 栈的数组存储表示; • 栈的链接存储表示; • 栈的应用: 表达式求值;

  33. 队列 • 队列的抽象数据类型; • 队列的顺序存储表示; • 队列的链接存储表示; • 队列的应用举例:打印杨辉三角形;

  34. 优先级队列 • 优先级队列的定义; • 优先级队列的链接存储表示; • 优先级队列的应用举例

  35. 考核要求 • 理解:栈的定义及实现 • 掌握:表达式求值 • 理解:队列的定义及实现 • 掌握:按层次输出二项展开式 • 理解:优先级队列的定义及链表实现

More Related