数据结构 袁平波 2018.2.

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

1.1 程序和程序设计 程 序:简单的说程序就是指令的集合。 计算机设计语言: 机器语言 :二进制 0 、 1 汇编语言:助记符(英语单词)。 高级语言: 人类自然语言(数学语言 + 英语) 如: C 语言、 Qbasic 、 VB 等 第一章:程序设计基本概念.
第一章 绪论 学习提要 1.1 什么是数据结构 1.2 基本概念 1.3 抽象数据类型 1.4 算法及其分析.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
数据结构 张秀虹
C#程序设计案例教程 第3章 程 序 结 构.
数据结构(C语言版) Data Structure
《高等数学》(理学) 常数项级数的概念 袁安锋
数 据 结 构 主讲人:文 军.
第 5 章 流程控制 (一): 條件分支.
第十章 内部排序 知识点3:快速排序.
数据结构——树和二叉树 1/96.
数据结构与算法 数据结构与算法实验
教材: 《数据结构(C语言版)》严蔚敏、吴伟民编著,清华大学出版社 主要参考教材: 《数据结构》 张乃孝编著,高等教育出版社
任课教师:赵玉艳 电话: 邮箱: 数据结构 第1章 绪论(一) 任课教师:赵玉艳 电话: 邮箱: 1/
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
C#程序设计基础 $5 流程控制.
数据结构 第1章 绪论 吴忠华.
佇列 (Queue).
C++Primer 3rd edition 中文版 Chap 5
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
走进编程 程序的顺序结构(二).
辅导课程六.
第2讲 绪论(二).
1.1 数据结构讨论的范畴 1.2 基本概念 1.3 算法和算法的量度.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第 3 讲 线性表(一).
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列.
Cyclic Hanoi问题 李凯旭.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
第二章 Java语言基础.
第三章 栈和队列.
《数据结构》 (计科、电信专业).
数据结构 第一章 绪论.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第一章 函数与极限.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言版 软件与理论教研室 张泽宝 哈尔滨工程大学计算机科学与技术学院.
数列.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
1 School of Computing and Information Engineering.
$9 泛型基础.
程式結構&語法.
第1章 绪论 2019/4/16.
数 据 结 构 与 算 法.
高等学校计算机专业教材 数据结构 袁平波 课程主页:
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第 四 讲 线性表(二).
第4章 Excel电子表格制作软件 4.4 函数(一).
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
第一章 绪论 1.1 引言 1.2 逻辑结构和存储结构 1.3 算法.
第二章 Java基本语法 讲师:复凡.
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
多重條件選擇敘述
鸡兔同笼(续) ——选择结构.
高等学校计算机专业教材 数据结构 袁平波
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
编译原理实践 6.程序设计语言PL/0.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

数据结构 袁平波 2018.2

第一章 绪论 1.1《数据结构》讨论范畴 1.2 基本概念和术语 1.3 抽象数据类型的表示与实现 1.4 算法和算法分析

1.1《数据结构》研究什么 算法+数据结构=程序设计 1968 美国唐·欧·克努特 设立《数据结构》课程 1976 瑞士 Niklaus Wirth 提出算法+数据结构=程序设计 数据结构是讨论非数值类问题的对象描述、信息组织方法及其相应的操作 [例]、设有一个电话号码薄,有N个人的姓名和电话号 码。要求设计一个程序,按人名查找号码,若不存在则给出不存在的信息。

[例] 下棋 井子棋 非线性数据结构-树

[例] 交叉口交通灯设置(顶点着色问题) 非线性——图

1.2 基本概念和术语 数据:数据是客观事物的符号表示。 数据元素:数据的基本单位,通常看作一个整体。 数据对象:性质相同的数据元素的集合。 关系:集合中元素之间的相关性。 数据结构:特性相同的数据元素构成的集合中,如果在数据元素之间存在一种或多种特定的关系,则称之为数据结构 。 Data-Structure=(D,S) D是元素有限集,S是关系有限集。 四类基本结构:1)集合 2)线性 3)树形 4)网状(图)

[例] linear=(D,R) D={1,2,3,4,5,6,7,8,9,10} R={<1,2>,<2,3>,<3,4>,<4,5>,<5,6>, <6,7>,<7,8>,<8,9>,<9,10>}

[例]tree=(D,R) D={a, b, c, d, e, f, g, h, i, j, k, l} R={<a,b>,<a,c>,<a,d>,<b,e>,<b,f>,<b,g>,<c,h>,<c,i>, <c,j>, <d,k>,<d,l>}

[例] graph=(D,R) D={1, 2, 3, 4, 5, 6, 7, 8, 9} R={<1,2>,<1,3>,<2,4>,<2,5>,<2,6>,<2,8>,<3,2>,<3,4>, <4,5>,<5,7>,<6,7>,<6,9>,<7,9>,<8,9>}

其他概念与术语 逻辑结构/物理结构(存储结构) 位(bit)/字节(byte) 元素(Element)/结点(Node)/数据域(DataField) 顺序存储/链式存储 数据类型:值的集合和定义在这个值集上的一组操作的总称。分原子和结构两种类型。 抽象数据类型(Abstract Data Type): 一个数学模型以及定义在该模型上的一组操作。

1.3 抽象数据类型的表示与实现 操作结果:〈操作结果描述〉 ADT=(D,S,P) D是数据对象,S是D上的关系的集合, P是对D的基本操作的集合。 格式: ADT 抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义> } ADT 抽象数据类型名 基本操作的 定义格式: 基本操作名(参数表) 初始条件:〈初始条件描述〉 操作结果:〈操作结果描述〉

数据对象:D={e1,e2,e3|e1,e2,e3Elemset} [例]抽象数据类型三元组的定义 ADT Triplet{ 数据对象:D={e1,e2,e3|e1,e2,e3Elemset} 数据关系:R={<e1,e2>,<e2,e3>} 基本操作: InitTriplet(&T,v1,v2,v3) 操作结果:构造三元组T,元素e1,e2,e3分别赋予v1,v2,v3 Get(T,i,&e) 初始条件:三元组T存在,1≤i≤3。 操作结果:用e返回T的第i元的值。 Max(T,&e) 初始条件:三元组T存在。 操作结果:用e返回T中三个元素的最大值。 … … }ADT Triplet

操作中的参数有两种 1)赋值参数 void add (int a, int b, int * c){ *c=a +b;} add(2,3,&c); 2)引用参数 void add (int a, int b, int &c){ c=a +b } add(2,3,c);

类C语言——介于伪码和C语言之间 1)预定义常量和类型 #define TRUE 1 #typedef int Status 2)数据元素类型约定为ElemType,由用户使用时自行定义。 3)基本操作的算法用函数描述: 函数类型 函数名(函数参数表){ //算法说明 语句序列 }//函数名 4)赋值语句 简单赋值: 变量名=表达式; 串联赋值: 变量名1=变量名2=…=表达式; 成组赋值: 变量名1[起始下标..终止下标]=变量名2[起始下标..终止下标]; 交换赋值: 变量名1←→变量名2; 条件赋值: 变量名=条件表达式?表达式T:表达式F

5)选择语句 条件语句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;

6)循环语句 for语句: for(赋初值;条件;修改表达式)语句; while语句: while(条件)语句; do-while语句: do{语句序列}while(条件); 7)结束语句 函数结束语句 return; return 表达式; 异常结束语句 exit; 8)输入输出语句 输入语句 scanf 输出语句 printf 9)注释 单行注释用“//” 10)基本函数: max,min,abs,floor,ceil,eof,eoln等。 11)逻辑运算 与运算&& 或运算||

1. 4算法和算法分析 1、算法:对问题求解步骤的描述,是一个确定的、有限长的操作序列。 1)有穷性 2)确定性 3)可行性 4)输入 5)输出 2、算法设计要求 1)正确性 2)可读性 3)健壮性 4)效率与低存储需求 3、算法的描述:类C语言 4、算法效率衡量方法与准则 : 时间复杂度:T(n)=O(f(n)) 空间复杂度:S(n)=O(g(n))

“O” 的形式定义 若f(n)是正整数n的一个函数,则xn=O(f(n))表示存在一个正的常数M,m,使得当nn0时都满足 m|f(n)|≤|xn| ≤ M|f(n)|; 换句话就是说这当整型自变量n趋向于无穷大时,两者的比值是一个不等于0的常数。

②、for (i=1;i<=n;i++) {x++;s+=x;} O(n) ③、for( i=1;i<=n;i++) 分析下列三个程序段: ①、x++;s=0; O(1) ②、for (i=1;i<=n;i++) {x++;s+=x;} O(n) ③、for( i=1;i<=n;i++) for (j=1;j<=n; j++) {x++; s+=x;} O(n2) 、f(n)=2n3+5n2+7n+c;(c为某一常数),则 T(n)= O (f(n))=O(n3)。

[例] 起泡排序 算法 1.3 void bubble_sort(int a[], int n){ [例] 起泡排序 算法 1.3 void bubble_sort(int a[], int n){ for (i=n-1, change=TRUE; i>=1 && change; --i) { change = FALSE; for (j=0; j<i; ++j) if (a[j] > a[j+1]) {a[j]a[j+1]; change = TRUE } } } // bubble_sort 时间复杂度O(n2)

常见函数的增长率