南航计算机系 南航计算机系 数据结构. 第一章 绪论  什么是数据结构 什么是数据结构  基本概念和术语 基本概念和术语  抽象数据类型的表示和实现 抽象数据类型的表示和实现  算法和算法分析 算法和算法分析.

Slides:



Advertisements
Similar presentations
首 页 首 页 上一页 下一页 本讲内容 投影法概述三视图形成及其投影规律平面立体三视图、尺寸标注 本讲内容 复习: P25~P31 、 P84~P85 作业: P7, P8, P14[2-32(2) A3 (1:1)]
Advertisements

纺纱学. 2 绪 论 基本要求:了解纺纱系统的类别 重点掌握:棉纺系统的工艺流程 3 一、纺纱原理与设备 纺纱:用物理或机械的方法将纺织纤维纺成纱 线的过程。 纺纱原理:初加工、原料的选配、开松除杂、 混和、梳理、精梳、并合、牵伸、加捻、卷绕等。 纺纱方法:传统纺纱方法、新型纺纱方法。 纺纱设备:开清棉联合机、梳棉机、精梳机、
第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
HistCite 结果分析示例 罗昭锋. By:SC 可能原因:文献年度过窄,少有相互引用.
一、拟合优度检验 二、变量的显著性检验 三、参数的置信区间
4 第四章 矩阵 学时:  18 学时。 教学手段:  讲授和讨论相结合,学生课堂练习,演练习题与辅导答疑相结合。 基本内容和教学目的:  基本内容: 矩阵的运算,可逆矩阵,初等矩阵及其性质和意义, 分块矩阵。  教学目的:  1 .使学生理解和掌握矩阵等价的相关理论  2 .能熟练地进行矩阵的各种运算.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
地理信息系统概述. 数据和信息 (Data & Information) 数据 原始事实 如:员工姓名, 数据可以有数值、图形、声音、视觉数据等 信息 以一定规则组织在一起的事实的集合。
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
第 2 章 数据流分析 内容概述 数据流分析推导的是数据沿着程序执行路 径流动的信息 – 过程内的分析:可用表达式分析、到达-定值分 析等 – 过程间分析 –Shape 分析 – 理论基础 – 数据流方程的求解.
回顾 栈、队列、循环队列的定义、特征和描 述 栈、队列、循环队列的表示方法 栈、队列、循环队列的重要操作 递归的定义、分类及优缺点 递归与栈的关系 简单递归程序的编写.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
有限自动机 (Finite Automata) 描述程序设计语言中的单词的识别过程。 主要内容: 确定有限自动机 DFA(Deterninistic FA) 确定有限自动机 DFA 的实现 非确定有限自动机 NFA(Nondeterninistic FA) NFA 到 DFA 的转换 DFA 的化简.
C 语言程序设计 2008 版. C 语言程序设计 教学要求  掌握程序设计语言的基本知识  常用算法  初步的程序设计能力 学习方法  自主学习  重视上机实践.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
实验一: 信号、 系统及系统响应 1 、实验目的 1 熟悉连续信号经理想采样前后的频谱变化关系, 加深对时 域采样定理的理解。 2 熟悉时域离散系统的时域特性。 3 利用卷积方法观察分析系统的时域特性。 4 掌握序列傅里叶变换的计算机实现方法, 利用序列的傅里 叶变换对连续信号、 离散信号及系统响应进行频域分析。
2.4 基本设计表达式 随机变量的统计特征值 结构的可靠性与可靠 基本设计表达式.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
第二章 贝叶斯决策理论 3学时.
操作系统原理课程设计指南 姜海燕 设计考核幻灯制作  1.1 封皮:系统名称,研制人员  1.2 目的及意义  1.3 功能设计:功能框图、用例图  1.4 结构设计:系统结构  1.5 核心技术及技术路线:画图  1.6 进度安排  1.7 人员安排  1.8.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 5 章 解线性方程组的直接法 实际中,存在大量的解线性方程组的问题。很多数值方 法到最后也会涉及到线性方程组的求解问题:如样条插值的 M 和.
从 Postscript 格式文献中提取 数学公式的方法. 概述 从 Postscript 格式文献中提取识别数学公式, 是数学公式识别领域的一个研究方向。主要针对 以 Word 和 Latex 为生成源的 Postscript 文档, 提出 基于内容的数学公式提取方法。首先重载 Postscript.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
§2.2 一元线性回归模型的参数估计 一、一元线性回归模型的基本假设 二、参数的普通最小二乘估计( OLS ) 三、参数估计的最大或然法 (ML) 四、最小二乘估计量的性质 五、参数估计量的概率分布及随机干 扰项方差的估计.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
9的乘法口诀 1 .把口诀说完全。 二八( ) 四六( ) 五八( ) 六八( ) 三七( ) 三八( ) 六七( ) 五七( ) 五六( ) 十六 四十八 四十二 二十四 二十一 三十五 四十 二十四 三十 2 .口算, 并说出用的是哪句口诀。 8×8= 4×6= 7×5= 6×8= 5×8=
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
平行线的平行公理与判定 九年制义务教育七年级几何 制作者:赵宁睿. 平行线的平行公理与判定 要点回顾 课堂练习 例题解析 课业小结 平行公理 平行判定.
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
§8-3 电 场 强 度 一、电场 近代物理证明:电场是一种物质。它具有能量、 动量、质量。 电荷 电场 电荷 电场对外的表现 : 1) 电场中的电荷要受到电场力的作用 ; 2) 电场力可移动电荷作功.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Introduction to Automatic Control The Laplace Transform Li Huifeng Tel:
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
第三章 正弦交流电路.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
第四章 不定积分. 二、 第二类换元积分法 一、 第一类换元积分法 4.2 换元积分法 第二类换元法 第一类换元法 基本思路 设 可导, 则有.
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
一、 版 面 构 成 的 概 念 版 面 构 成 的 概 念 二、 版 面 构 成 的 发 展 趋 势 版 面 构 成 的 发 展 趋 势 三、 广 告 文 字 的 版 面 构 成 广 告 文 字 的 版 面 构 成 四、 广 告 版 面 的 视 觉 流 程 广 告 版 面 的 视 觉 流 程.
§5.6 利用希尔伯特 (Hilbert) 变换 研究系统的约束特性 希尔伯特变换的引入 可实现系统的网络函数与希尔伯特变换.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
本章讨论有限自由度结构系统,在给定载荷和初始条件激励下的系统动力响应计算方法。 第 六 章
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

南航计算机系 南航计算机系 数据结构

第一章 绪论  什么是数据结构 什么是数据结构  基本概念和术语 基本概念和术语  抽象数据类型的表示和实现 抽象数据类型的表示和实现  算法和算法分析 算法和算法分析

绪论 数据结构在计算机科学中是一门综合性的专业基 础课. 在计算机科学中,数据结构不仅是一般程序设 计的基础,而且是设计和编译程序、操作系统、数据 库系统及其它系统程序和大型应用程序的重要基础。 本课件详细介绍了线形表、栈和队列、串、数组 和广义表、树和二叉树及图等几种基本类型的数据结构, 以及在程序设计中经常遇到的两个问题 -- 查找和排序。

基本概念和术语 数据: 是对客观事物的符号表示,在计算机科 学中 是指所有能输入到计算机中并被计算机程序 处理的符号的总称。 数据元素:是数据的基本单位。 数据项: 是数据的不可分割的最小单位。 数据对象:是性质相同的数据元素的集合,是数据的一 个子集。 数据结构:是相互之间存在一种或多种特定关系的数据 元素的集合 。

四种基本数据结构: ( 1 )集合:元素之间同属于一个集合; ( 2 )线性结构 : 一对一关系; ( 3 )树形结构: 一对多关系; ( 4 )图状结构: 多对多关系; 数据结构形式定义: Data Structure=(D,S) 其中: D 是数据元素的有限集, S 是 D 上关系 的有限集。

物理结构(存储结构):数据结构在计算机中的表示。 数据元素之间的关系在计算机中有两种不同 的表示方法:顺序映象和非顺序映象,并由此得 到两种不同的存储结构:顺序存储结构和链式存 储结构。 数据类型( Data Type ):数据类型是一个值的集合和定 义在这个值集上的一组操作的总称。 抽象数据类型( Abstract Data Type) :是指一个数学模型 以及定义在该模型上的一组操作。

抽象数据类型表示: ADT= ( D , S , P ) 抽象数据类型格式: ADT 抽象数据类型名 { 数据对象: 数据关系: 基本操作: } ADT 抽象数据类型名 多形数据类型( Polymorphic Data Type ): 是指其值的成分不确定的数据类型。

抽象数据类型三元组的定义: ADT Triplet { 数据对象: D={e1,e2,e3|e1,e2,e3 ∈ ElemSet ( 定义了关系运算的某个集合) } 数据关系: R1={, } 基本操作: InitTriplet(&T,v2,v3) 操作结果:构造了三元组 T ,元素 e1 和 e2 分别被 赋予参数 v1,v2, 和 v3 的值 DestroyTrplet(&T) 操作结果:三元组 T 被销毁

Get(T,i,&e) 初始条件:三元组 T 已存在, 1<=i<=3 操作结果:用 e 返回 T 的第 I 元的值 Put(&T,i,e) 初始条件:三元组 T 已存在, 1<=i<=3 操作结果:改变 T 的第 I 元的值为 e lsAscending(T) 初始条件:三元组已存在 操作结果:如果 T 的三个元素按升序排列,则返 回 1, 否则返回 0

lsDescending(T) 初始条件:三元组 T 已存在 操作结果:如果 T 的三个元素按降序排列,则返回 1, 否则返回 0 Max(T,&e) 初始条件:三元组 T 已存在 操作结果:用 e 返回 T 的三个元素中的最大值 Min(T,&e) 初始条件:三元组 T 已存在 操作结果:用 e 返回 T 的三个元素中的最小值 }ADT Triplet

ADT 的表示和实现 ADT 的表示和实现 ㈠ 数据结构类型说明〈存储结构〉 ㈡ 基本操作函数原理说明 ㈢ 基本操作函数的实现 算法:对特定求解步骤的一个描述(强调描述功能) 程序:图示法 —— 框图 用类 c 语言作为描述工具,简要说明如下: ⑴ 预定义常量和类型: // 函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1

#define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //Status 是函数的类型, 其值是函数结果状态代码 Typedef int Status; ⑵ 数据结构的表示(存储结构)用类型定义描述。 数据元素类型约定为 ElemType, 由用户的使用该 数据类型时自行定义 ⑶ 基本操作的算法都用以下形式的函数描述: 函数类型 函数名(函数参数表) { // 算法说明 语句序列 }// 函数名

⑷ 赋值语句有 简单赋值 变量名 = 表达式; 串联赋值 变量名 1= 变量名 2=…= 变量名 k= 表达式; 成组赋值 (变量名 1,…, 变量名 k)=( 表达式 1,…, 表达式 k); 结构名 = 结构名; 结构名 = (值 1, …, 值 k); 变量名 [ ]= 表达式; 变量名 [ 起始下标.. 终止下标 ]= 变量名 [ 起始 下标.. 终止下标 ] 交换赋值 变量名 ←→ 变量名; 条件赋值 变量名 = 条件表达式?表达式 T :表达式 F ;

⑸ 选择语句有 条件语句 1 if ( 表达式 ) 语句; 条件语句 2 if ( 表达式 ) 语句; else 语句; 开关语句 1 switch ( 表达式 ) { case 值 1: 语句序列 1;break; … case 值 n: 语句序列 n;break; default: 语句序列 n+1; } 开关语句 2 switch { case 条件 1: 语句序列 1;break; … case 条件 n :语句序列 n ; break; default: 语句序列 n+1; }

⑹ 循环语句有 for 语句 for (赋初值表达式序列:条件:修改表 达式 序列)语句; While 语句 while (条件)语句; do-while 语句 do { 语句序列; }while (条件); ⑺ 结束语句有 函数结束语句 return 表达式; return ; Case 结束语句 break ; 异常结束语句 exit (异常代码);

⑻ 输入和输出语句有 输入语句 scanf ( [ 格式串 ] ,变量 1,…, 变量 n ); 输入语句 printf ( [ 格式串 ] ,表达式 1,… ,表达式 n ); 通常省略格式串。 ⑼ 注释 单行注释 // 文字序列 ⑽ 基本函数有 求最大值 max (表达式 1,…, 表达式 n ) 求最小值 min (表达式 1,…, 表达式 n ) 求绝对值 abs (表达式) 求不足整数值 floor (表达式) 求进位整数值 ceil (表达式) 判定文件结束 eof (文件变量) 或 eof 判定行结束 eoln (文件变量) 或 eoln

(11) 逻辑运算约定 与运算 &&: 对于 A&&B, 当 A 的值为 0 时, 不再 对 B 求值。 或运算 || : 对于 A||B, 当 A 的值为非 0 时, 不再 对 B 求值 例:抽象数据类型 Triplet 的表示和实现

Typedef ElemType *Triplet // 由 InitTriplet 分配三个元素存储空间 基本操作的函数原型说明 Status InitTriplet(Triplet &T, ElemType v1,ElemType v2,ElemType v3); // 操作结果:构造了三元组 T ,元素 e1,e2, 和 e3 分别被赋以参数 v1,v2, 和 v3 的值 Status DestroyTriplet (Triplet &T); // 操作结果:三元组被销毁 Status Get (Triplet T, int I, ElemType &e); // 初始条件:三元组 T 已存在, 1<=i<=3 // 操作结果:用 e 返回 T 的第 I 元的值

Status Put(Triplet &T, int I, ElemType e); // 初始条件:三元组 T 已存在, 1<=I<=3 // 操作结果:改变 T 的第 I 元的值为 e Status IsAscending(Triplet T); // 初始条件:三元组 T 已存在 // 操作结果:如果 T 的三个元素按升序排列,则返回 1, 否 则返回 0 Status IsDescending(Triplet T); // 初始条件:三元组 T 已存在 // 操作结果:如果 T 的三个元素按降序排列,则返回 1, 否 则返回 0

Status Max(Triplet, ElemType &e); // 初始条件:三元组 T 已存在 // 操作结果:用 e 返回 T 的三个元素中的最大值 Status Min(Triplet T,ElemType &e); / / 初始条件:三元组 T 已存在 // 操作结果:用 e 返回 T 的三个元素中的最小值

//---- 基本操作的实现 ---- Status InitTriplet(Triplet &T,ElemType v1, ElemType v2, ElemType v3){ // 构造三元组 T ,依次置 T 的三个元素的初值为 v1,v2,v3 T=(ElemType *) malloc (3*sizeof(ElemType)); // 分配 3 个元素的存储空间 if (! T) exit (OVERFLOW);// 分配存储空间失败 T[0]=v1; T[1]=v2; T[2]=v3; return ok; }//InitTriplet

Status DestroyTriplet(Triplet &T){ // 销毁三元组 T free(T); T=NULL; return ok; }//DestroyTriplet Status Get (Triplet T,int I,ElemType &e){ //1<=I<=3, 用 e 返回 T 的第 I 元的值 if (I 3) return ERROR; e=T[i-1]=e; return Ok; }//Get

Status Put (Triplet &T,int I,ElemType e){ //1<=I<=3, 置 T 的第 I 元的值为 e if (i 3) return ERROR; e=T[i-1]=e; return Ok; }//put Status IsAscending(Triplet T){ // 如果 T 的三个元素按升序排列,则返回 1, 否则返回 0 return (T[0]<=T[1] && (T[1]<=T[2]); }//IsAscending Status IsDescending(Triplet T){ // 如果 T 的三个元素按降序排列,则返回 1, 否则返回 0 return (T[0]>=T[1] && (T[1]>=T[2]); }//IsDescending

Status Max (Triplet T,ElemType &e){ // 用 e 返回指向 T 的最大元素的值 e=(T[0]>=T[1]) ?((T[0]>=T[2]) ?T[0]:T[2]):((T[1]>=T[2]) ?T[1]:T[2]); return OK; }//Max Status Min(Triplet T,ElemType &e){ // 用 e 返回指向 T 的最小元素的值 e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]) :((T[1]<=T[2])?T[1]:T[2]); return OK; }//Min

算法和算法分析 算法和算法分析 算法: 定义:是对特定问题求解步骤的一种描 述,它是指令的有限序列。 1. 特性: ( 1 )有穷性 ( 2 )确定性 ( 3 )可行性 ( 4 )输入 ( 5 )输出

2. 算法设计的要求 ( 1 )正确性 ( 2 )可读性 ( 3 )健壮性 ( 4 )效率与低存储需求 3. 影响时间因素 ( 1 )输入数据量 ( 2 )编译时间 ( 3 )每一条指令执行时间 ( 4 )指令重复执行次数

例如:两个 N*N 矩阵相乘算法, “ 乘法 ” 运算是 “ 矩阵相乘 问题 ” 的基本操作,整个算法的执行时间与该基本操作 (乘法)重复执行的次数 n 3 成正比 记为 T(n)=( )(n 3 ) For (i=1;i<=n;++i) for (j=1;j<=n;++j){ c[i][j]=0; for(k=1;k<=n;++k) c[i][j]+=a[i][k]*b[k][j]; }

T=n+1+n(n+1)+n 2 +n 2 (n+1)+n 3 =2n 3 +3n 2 +2n+1 T 执行次数(频度) 当 N→∞ , T 的数量级为 n 3 ,用大 “o” 表示这个算法的复杂度。 本章要求:基本术语 ADT 定义,表示和实现方法 熟悉类 c 语言的描述方法 了解基本算法