4.58k likes | 4.88k Views
课程简介. 数据结构. 深圳大学计算机系 蔡茂国. 《数据结构 》 课程简介. 主要参考教材. 本课程教材为: 《 数据结构》( C 语言版) 严蔚敏,吴伟民 清华大学出版社 2004 年11月(第28次印刷). 2. 《数据结构 》 课程简介. 课件下载. 所有课件、作业及实验,均上传至: 深圳大学首页-- 课程中心-- 输入学生姓名及密码,实现登录-- 从《数据结构 》 课程下下载. 3. 第一章 数据结构绪论. 数据结构. 深圳大学计算机系 蔡茂国. 第1章 数据结构绪论. 一、数据. 第一节 数据结构.
E N D
课程简介 数据结构 深圳大学计算机系蔡茂国
《数据结构》课程简介 主要参考教材 本课程教材为: • 《数据结构》(C语言版) 严蔚敏,吴伟民 清华大学出版社 2004年11月(第28次印刷) 2
《数据结构》课程简介 课件下载 所有课件、作业及实验,均上传至: • 深圳大学首页-- 课程中心-- 输入学生姓名及密码,实现登录-- 从《数据结构》课程下下载 3
第一章数据结构绪论 数据结构 深圳大学计算机系蔡茂国
第1章 数据结构绪论 一、数据 第一节 数据结构 • 是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合 • 数值性数据 • 非数值性数据 5
第1章 数据结构绪论 二、数据元素(Data Element) 第一节 数据结构 • 数据的基本单位。在计算机程序中常作为一个整体进行考虑和处理。 • 有时一个数据元素可以由若干数据项(Data Item)组成(此时数据元素被称为记录) • 数据元素又称为元素、结点、记录 6
第1章 数据结构绪论 三、数据项(Data Item) 第一节 数据结构 • 具有独立含义的最小标识单位。 7
第1章 数据结构绪论 四、数据对象(Data Object) 第一节 数据结构 • 具有相同性质的数据元素的集合。 • 整数数据对象 N = {0, 1, 2, …} • 字母字符数据对象 C={ ‘A’, ‘B’, ‘C’, …‘F’ }。 8
第1章 数据结构绪论 五、结构(Structure) 第一节 数据结构 结构是元素之间的: • 空间位置关系 • 相互作用和依赖关系 9
6 3 3 6 2 2 5 5 4 4 6 5 2 3 1 4 1 1 2 3 4 6 5 第1章 数据结构绪论 五、结构 第一节 数据结构 四种基本结构 • 集合结构 • 线性结构 • 树形结构 • 图形结构 1 10
第1章 数据结构绪论 六、数据结构(Data Structure) 第一节 数据结构 1. 形式定义: • 某一数据对象的所有数据成员之间的关系。记为: Data_Structure = {D, S} • 其中,D 是某一数据对象, • S 是该对象中所有数据成员之间的关系的有限集合。 11
6 5 2 3 1 4 第1章 数据结构绪论 六、数据结构 第一节 数据结构 2. 线性数据结构举例 L = {K, R} • K = {1, 2, 3, 4, 5, 6} • R = {<1,2>, <2,3>, <3,4>, <4,5>, <5,6>} 12
1 2 3 4 6 5 第1章 数据结构绪论 六、数据结构 第一节 数据结构 3. 树形数据结构举例 T = {K, R} • K = {1, 2, 3, 4, 5, 6} • R = {<1,2>, <1,3>, <2,4>, <2,5>, <3,6>} 13
3 2 6 5 4 1 第1章 数据结构绪论 六、数据结构 第一节 数据结构 4. 图形数据结构举例 G = {K, R} • K = {1, 2, 3, 4, 5, 6} • R = {(1,2), (1,5), (1,6), (2,3), (2,4), (2,6), (3,4), (4,5), (4,6), (5,6)} 14
学号 姓名 学院 专业 2004131221 黄磊 信息工程学院 信息工程学院 2004131209 熊玲玲 信息工程学院 信息工程学院 2004131135 彭智俊 信息工程学院 信息工程学院 2004131252 徐元庆 信息工程学院 信息工程学院 2004131099 吴小池 信息工程学院 信息工程学院 2004131031 陈明亮 信息工程学院 信息工程学院 第1章 数据结构绪论 七、应用举例 第一节 数据结构 1. 线性数据结构举例 • 数据结构学生选课名单(部分) 15
/root bin lib user etc xiong pan hang math ds sw 第1章 数据结构绪论 七、应用举例 第一节 数据结构 2. 树形数据结构举例 • UNIX文件系统结构图(部分) 16
龙岗 龙华 宝安 梅林 西丽 布吉 南山 福田 罗湖 盐田 第1章 数据结构绪论 七、应用举例 第一节 数据结构 3. 图形数据结构举例 • 深圳城市交通示意图(部分) 17
第1章 数据结构绪论 八、数据结构要解决的问题 第一节 数据结构 • 如何为应用程序中涉及到各种各样的数据,建立相应的数据结构(表、树或图),并依此实现软件功能 • 从广义上讲,数据结构描述现实世界实体的数学模型及其上的操作在计算机中的表示和实现 18
3 6 2 5 4 6 5 2 3 1 4 1 1 2 3 4 6 5 第1章 数据结构绪论 一、逻辑结构 第二节 数据的结构 • 逻辑结构描述数据元素之间的关系 • 线性结构 • 线性表(表,栈,队列,串等) • 非线性结构 • 树(二叉树,Huffman树,二叉排序树等) • 图(有向图,无向图等) 19
第1章 数据结构绪论 二、物理结构(存储结构) 第二节 数据的结构 • 物理结构是数据结构在计算机中的表示(或映象) • 顺序存储表示(可以用C语言中一维数组表示) • 链接存储表示(可以用C语言中的指针表示) • 索引存储表示 • 散列存储表示 20
… … 0300 3.0 0415 0302 -2.3 -2.3 … … 0632 0611 3.0 -0.7 0634 0613 0415 4.8 … … 第1章 数据结构绪论 二、物理结构(存储结构) 第二节 数据的结构 • 复数存储结构举例 顺序存储结构 链式存储结构 z1=3.0- 2.3i z2=-0.7+4.8i z1=3.0- 2.3i 指针或链 (地址) 21
第1章 数据结构绪论 一、数据类型 第三节 数据类型 • 数据类型是一个值的集合和定义在这个值集上的一组操作的总称 • 如C语言中的整型变量(int),其值集为某个区间上的整数,定义在其上的操作为+, -, x, /等 22
第1章 数据结构绪论 二、原子数据类型和结构数据类型 第三节 数据类型 1. 原子数据类型 • 是不可分解的数据类型 • 如C语言中的整型(int),实型(float),字符型(char),指针类型(*)和空类型(void)等 23
第1章 数据结构绪论 二、原子数据类型和结构数据类型 第三节 数据类型 2. 结构数据类型 • 由若干成分(原子类型或结构类型)按某种结构组成的数据类型 • 结构数据类型可以看作是一种数据结构和定义在其上的一组操作组成的整体 • 如数组,由若干分量组成,每个分量可以是整数,也可以是数组(如int A[10]) 24
第1章 数据结构绪论 三、抽象数据类型(Abstract Data Type) 第三节 数据类型 • 由用户定义,用以表示应用问题的数据模型 • 由基本的数据类型组成, 并包括一组相关的服务(或称操作) • 信息隐蔽和数据封装,使用与实现相分离 25
第1章 数据结构绪论 三、抽象数据类型(ADT) 第三节 数据类型 • 抽象数据类型(ADT)是一个数学模型以及定义在该模型上的一组操作 • 抽象数据类型 = 数据结构 + 定义在此数据结 构上的一组操作 26
第1章 数据结构绪论 三、抽象数据类型(ADT表示) 第三节 数据类型 • 抽象数据类型可用(D,S,P)三元组表示 • D是数据对象 • S是D上的关系集 • P是对D的基本操作集。 27
第1章 数据结构绪论 三、抽象数据类型(ADT定义) 第三节 数据类型 • ADT 抽象数据类型名 { 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作(函数)的定义〉 } ADT 抽象数据类型名 28
第1章 数据结构绪论 三、抽象数据类型(ADT定义举例) 第三节 数据类型 • ADT Triplet { 数据对象:D = {e1,e2,e3 | e1,e2,e3∈ElemSet} 数据关系:R = {<e1,e2>, <e2,e3>} 基本操作:Max(T, &e) 初始条件:三元组T已存在。 操作结果:用e返回T的3个元素中的最大值。 Min(T, &e) 初始条件:三元组T已存在。 操作结果:用e返回T的3个元素中的最小值。 } ADT Triplet 29
第1章 数据结构绪论 三、抽象数据类型(ADT定义实现) 第三节 数据类型 • 抽象数据类型可以通过固有数据类型(C语言中已实现的数据类型)来实现 • 抽象数据类型 类 class • 数据对象 数据成员 • 基本操作 成员函数(方法) 30
第1章 数据结构绪论 一、算法(Algorithm) 第四节 算法分析 • 算法是对特定问题求解步骤的一种描述 • 是一有限长的操作序列 31
第1章 数据结构绪论 一、算法(特性) 第四节 算法分析 • 有穷性:算法在执行有穷步后能结束 • 确定性:每步定义都是确切、无歧义 • 可行性:每一条运算应足够基本(已验算正确) • 输入: 有0个或多个输入 • 输出: 有一个或多个输出 32
第1章 数据结构绪论 一、算法(举例) 第四节 算法分析 例子:选择排序 问题:递增排序 解决方案:逐个选择最小数据 算法框架: for ( int i = 0; i < n-1; i++ ) { //n-1趟 从a[i]检查到a[n-1],找到最小数; 若最小整数在a[k], 交换a[i]与a[k]; } 33
第1章 数据结构绪论 二、算法设计的要求 第四节 算法分析 • 正确性:满足具体问题的需求 • 可读性:便于理解和修改 • 健壮性:当输入数据非法时,也能适当反应 • 效率高:执行时间少 • 空间省:执行中需要的最大存储空间 34
第1章 数据结构绪论 三、时间复杂度 第四节 算法分析 • 衡量算法的效率,主要依据算法执行所需要的时间,即时间复杂度 • 事后统计法:计算算法开始时间与完成时间差值 • 事前统计法:依据算法选用何种策略及问题的规模n,是常用的方法 35
第1章 数据结构绪论 三、时间复杂度 第四节 算法分析 • 时间复杂度是问题规模n的函数f(n),即: T(n) = O(f(n)) • 一般地,时间复杂度用算法中最深层循环内的语句中的原操作的重复执行次数表示 36
第1章 数据结构绪论 三、时间复杂度 第四节 算法分析 a. {y *= x;} b. for (i=1; i<=n; i++} {y *= x;} c. for (j=1; j<=n; j++} for (i=1; i<=n; i++} {y *= x;} • a, b, c三个算法中,“ y *= x;”程序段的时间复杂度分别为O(1), O(n), O(n2),分别称为常量阶,线性阶,平方阶 37
第1章 数据结构绪论 三、时间复杂度 第四节 算法分析 • 时间复杂度除常量阶[O(1)],线性阶[O(n)], 平方阶[O(n2)]外,还有对数阶[O(logn)],排列阶[O(n!)],指数阶[O(2n)]等,是相对于问题规模n的增长率的表示方法 • 指数阶随问题规模增长过快,一般不宜使用 38
第1章 数据结构绪论 三、时间复杂度 第四节 算法分析 • 如果算法的执行有多种可能的操作顺序,则求其平均时间复杂度 • 如果无法求取平均时间复杂度,则采用最坏情况下的时间复杂度 • 时间复杂度是衡量算法好坏的一个最重要的标准 39
第1章 数据结构绪论 四、空间复杂度 第四节 算法分析 • 空间复杂度指算法执行时,所需要存储空间的量度,它也是问题规模的函数,即: S(n) = O(f(n)) 40
第二章线性表 数据结构 深圳大学计算机系蔡茂国
6 5 2 3 1 4 第2章 线性表 一、线性数据结构的特点 第一节 线性表 • 在数据元素的非空有限集中 1、存在惟一的一个被称作“第一个”的数据元素(如“1”) 2、存在惟一的一个被称作“最后一个”的数据元素(如“6”) 3、除第一个元素外,每个数据元素均只有一个前驱 4、除最后一个元素外,每个数据元素均只有一个后继(next)(如“1”的next是“2”, “2”的next是“3”) 42
第2章 线性表 二、线性表 第一节 线性表 • 线性表是最简单的一类线性数据结构 • 线性表是由n个数据元素组成的有限序列,相邻数据元素之间存在着序偶关系,可以写为: (a1, a2,…ai-1, ai, ai+1,…an-1, an) 其中,ai是表中元素,i表示元素ai的位置,n是表的长度 43
第2章 线性表 二、线性表 第一节 线性表 • 线性表中的元素具有相同的特性,属于同一数据对象,如: 1.26个字母的字母表: (A,B,C,D,…,Z) 2.近期每天的平均温度:(30℃, 28℃, 29℃,…) 44
第2章 线性表 一、顺序表 第二节 顺序表 • 顺序表是线性表的顺序表示 • 用一组地址连续的存储单元依次存储线性表的数据元素 b b+1 b+2 b+3 b+4 … b+24 b+25 45
1 2 … i … … … n a1a2 … a i … … … an b b+l … b+(i-1)*l … … … b+(n-1)*l idle 第2章 线性表 一、顺序表(元素位置) 第二节 顺序表 • 顺序表数据元素的位置: LOC(a i) = LOC( a i-1 ) + l LOC(a i) = LOC(a1)+(i-1)*ll表示元素占用的内存单元 数 46
第2章 线性表 二、顺序表的定义 第二节 顺序表 • 采用C语言中动态分配的一维数组表示顺序表 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define LISTINCREMENT 10 // 线性表存储空间的分配增量 Typedef struct { ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(元素数) } Sqlist; 47
第2章 线性表 三、顺序表的初始化 第二节 顺序表 • 创建一个顺序表L Status InitList_Sq(Sqlist &L) { L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); // 存储分配失败 L.length = 0; // 空表长度为0 L.listsize = LIST_INIT_SIZE; // 初始存储容量 return OK; } // InitList_Sq 48
第2章 线性表 三、顺序表的插入 第二节 顺序表 • 顺序表的插入操作是指在顺序表的第i-1个数据元素和第i个数据元素之间插入一个新的数据元素,即将长度为n的顺序表: (a1,…ai-1, ai, …, an) 变成长度为n+1的顺序表: (a1,…ai-1, e, ai, …, an) 49
25 34 57 16 48 09 63 0 1 2 3 4 5 6 7 i=4 50 插入 e 0 1 2 3 4 5 6 7 25 34 57 50 16 48 09 63 50 第2章 线性表 三、顺序表的插入 第二节 顺序表 • 在第3个元素与第4个元素之间插入新元素b • 需要将最后元素n至第4元素(共7-4+1)都向后移一位置 50