第一章数据结构概论

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1) 输入:它接受一些输入(有些情况下不需要输入);
(2) 输出:至少产生一个输出; (3) 确定性:算法的每一步必须有充分明确的含义,不可以有歧义;
(4) 有限性:算法是一个有限指令集,并一定在有限步骤之后终止;
(5) 可行性:算法的每一步必须在计算机能处理的范围之内
另外,算法的描述可以不依赖于任何一种计算机语言以及具体的 实现手段。可以用自然语言、流程图等方法来描述。
数据结构(C语言版) Data Structure
授课教师:孙晓芳 联系方式:sunxiaofang11@126.com
课程安排
教材:
«数据结构» 高等教育出版社 陈越
参考资料:
《数据结构学习与实验指导》,陈越著,高等教育出版社
学时:
36学时课堂
课程要求
成绩构成及比例

总评成绩=平时总成绩(40%)+期末考试成绩×60%
8/25
第1章 概论
§2.2 抽象数据类型
[例1.4]“矩阵”的抽象数据类型定义
类型名称:Matrix 数据对象集:一个MN的矩阵 A。 操作集:对于任意矩阵A、B、C Matrix,以及正整数i、j、M、N, 以下仅列出几项有代表性的操作。 1)Matrix Create( int M, int N ):返回一个MN的空矩阵; 2) int GetMaxRow( Matrix A ):返回矩阵A的总行数; 3)int GetMaxCol( Matrix A ):返回矩阵A的总列数; 4)ElementType GetEntry( Matrix A, int i, int j ):返回矩阵A的第i行、 第j列的元素; 5)Matrix Add( Matrix A, Matrix B ):如果A和B的行、列数一致,则 返回矩阵C=A+B,否则返回错误标志; 6) Matrix Multiply( Matrix A, Matrix B ):如果A的列数等于B的行数, 则返回矩阵C = AB,否则返回错误标志; 7)……
点都有且只有一个直接前趋和一个直接后继结点。
(2)非线性结构的逻辑特征是一个结点可能有多个直接前趋和直接后继。
数据的存储结构
数据的逻辑结构是面向应用问题的,是从用户角度看到的数据的结 构。数据必须在计算机内存储,数据的存储结构(storage structure)是研究数据元素和数据元素之间的关系如何在计算机中 表示,是逻辑数据的存储映像,它是面向计算机的。 实现数据的逻辑结构到计算机存储器的映像有多种不同的方式。通
(2)链式存储结构(Linked Storage Structure):链式存储结构 把逻辑上相邻的两个元素存放在物理上不一定相邻的存储单元中,结
点间的逻辑关系是由附加的指针字段表示的。链式存储结构的特点就
是将存放每个数据元素的结点分为两部分:一部分存放数据元素(称 为数据域);另一部分存放指示存储地址的指针 (称为指针域),借助
直接法快了一个数量级!
int main () { /* 不在测试范围内的准备工作写在 clock()调用之前*/ 为什么会这样? start = clock(); /* 开始计时 */ function(); /* 把被测函数加在这里 */ stop = clock(); /* 停止计时 */ duration = ((double)(stop - start))/CLK_TCK;/* 计算运行时间 */ /* 其他不在测试范围的处理写在后面,例如输出duration的值 */ return 0; }
物理结构:数据对象信息在计算机内存中的存储组织关
系,它依赖于计算机语言。一般分为“顺序存储”和“链 式存储”。(索引存储,散列存储)
线性结构(线性表、栈、队列、串、数组等)
逻辑结构 非线性结构 树结构 图结构
顺序结构 存储(物理)结构 数据结构 链式结构 插入 数据运算 删除 修改 查找 排序
5/25
第1章 概论
§1 引子
– 即使解决一个非常简单的问题,往往也有多种方法, 且不同方法之间的效率可能相差甚远 – 解决问题方法的效率 • 跟数据的组织方式有关(如例1.1) • 跟空间的利用效率有关(如例1.2) • 跟算法的巧妙程度有关(如例1.3)
6/25
第1章 概论
§2.1 术语定义
数据的逻辑结构
数据的逻辑结构就是数据元素之间的逻辑关系。可表示为: Data_Structure =(D,R) 其中,D是组成数据的数据元素的有限集合,R是数据元素之间的关系集合。 根据数据元素之间关系的不同特性,数据结构可分为线性数据结构和非线 性数据结构。 (1)线性结构的逻辑特征是除第一个结点和最后一个结点外,其他所有结
数据对象: 计算机要处理的事物,通常是性质相同的数据元素的集 合。如例1中“图书” 。 操作:处理事物的动作集合,如例1中的“查找”和“插入”, 例2的函数“求值”等。 算法: 操作的实现方法,如例1的按字母序排放的“查找”和 “插入”、例2的“直接法”和“秦九韶法”等; 通常一个算法用一个函数来实现。
9/25
第1章 概论
§2.2 抽象数据类型
“抽象”
描述数据对象时,并不规定其中数据元素的类型 对数据对象的描述不依赖其在计算机中的存储方法 描述操作时,只描述操作要实现的功能,并不涉及 具体实现方法
第1章 概论
§3.1 算法定义
【定义】一个算法是解决某一类问题的步骤的描述。一般 而言,算法应该符合以下五项要求:
指针表示数据元素之间的关系。
例:复数7-4i 的两种存储方式: (1)地址 内容 (2)地址 内容
0320
7 4
0320 0322
7
0322
0702
4
0702
数据结构定义:
按某种逻辑关系组织起来的一批数据(或称带结构的数 据元素的集合)应用计算机语言并按一定的存储表示 方式 把它们存储在计算机的存储器中,并在其上定义了一个运 算的集合。
可能造成空间的浪费!
查找效率 跟数据的组织方式有关!
2/25
第1章 概论
§1 引子
[例1.2] :写程序实现一个函数PrintN,使得传入一个正 整数为N的参数后,能顺序打印从1到N的全部正整数。
void PrintN ( int N ) { int i; for ( i=1; i<=N; i++ ) printf(“%d\n”, i ); return; }
但是,用某一种计算机语言进行伪码描述往往使算法容易被理解, 本书即采用C语言的部分语法作为描述算法的工具。
10/25
第1章 概论
§3.1 算法例子
〖例〗 选择法排序:把n个整数排序成从小到大。
思想:从余下的未排序的部分整数中,挑选最小整数放在 前面已排序部分的后面.
哪里? 如何进行排序?
void SelectionSort ( int List[], int N ) { /* 将N个整数List[0]...List[N-1]进行非递减排序 */ for ( i = 0; i < N; i ++ ) { MinPosition = ScanForMin( List, i, N–1 ); /* 从List[i]到List[N–1]中找最小元,并将其位置赋给MinPosition */ Swap( List[i], List[MinPosition] ); /* 将未排序部分的最小元换到有序部分的最后位置 */ } 选择排序 = 找最小整数 + 交换至合适位置. }
其中平时成绩包括考勤(占总分的10%)、作业(占总分 的20%)、小测验(占总分的10%)

取消考试资格情况

缺课累计13学时及以上者取消考试资格;
无故旷课8学时者取消考试资格;


抄袭他人作业、未完成作业次数较多的取消考试资格。
第一章 概论
引子
数据结构 算法
应用实例
Leabharlann Baidu
第1章 概论
§1 引子
void PrintN ( int N ) { if ( !N ) return; PrintN( N – 1 ); printf(“%d\n”, N ); return; }
运行效率 跟空间的利用效率有关!
3/25
第1章 概论
§1 引子
[例1.3] 多项式的标准表达式可以写为: f(x) = a0 + a1x + a2x2 +… + anxn 现给定一个多项式的阶数 n,并将全体系数存放在数组 a[ ] 里。请写程序计算这个多项式在给定点 x 处的值。 [ [方法 方法2] 1] 秦九韶法 计算多项式函数值的直接法 f(x) = a0 + x (a1+ x (a2 +… + x (an) …) double f( int double a[], double double f( int n, n, double a[], double x )x ) /* 计算阶数为n,系数为a[0]...a[n]的多项式在x点的值 */ {{ /* 计算阶数为n,系数为a[0]...a[n]的多项式在x点的值 */ int i; int i; double p = a[0]; double p = a[n]; for ( i=1; i<=n; i++ ) for (i=n; i>0; i--) p += a[i]*pow(x, i); p = a[i-1] + x*p; return p; return p; } }
为什么要学数据结构?
“数据结构”是计算机科学与技术专业、软件工程专业甚至于 其它电气信息类专业的重要专业基础课程。它所讨论的知识内容和提
倡的技术方法,无论对进一步学习计算机领域的其它课程,还是对从
事大型信息工程的开发,都是重要而必备的基础。 程序设计解决问题往往有多种方法,且不同方法之间的效率可 能相差甚远。程序的时间和空间效率,不仅跟数据的组织方式有关, 也跟处理流程的巧妙程度有关。本课程将介绍并探讨有关数据组织、 算法设计、时间和空间效率的概念和通用分析方法,帮助学生学会数 据的组织方法和一些典型算法的实现,能够针对问题的应用背景分析, 选择合适的数据结构,从而培养高级程序设计技能。
定义2----是相互之间存在一种或多种特定关系的数据元素 的集合。
第1章 概论
§2.2 抽象数据类型
数据类型: 数据对象的类型确定了其“操作集”和 “数据定义域”。比如:整型,字符型等。 抽象数据类型(Abstract Data Type ,简称ADT) : 由用户定义,用以表示应用问题的数据模型。它由基本的 数据类型构成,并包括一组相关的服务(或称操作)。 ADT的形式化定义是三元组:ADT=(D,S,P) 其中:D是数据对象,S是D上的关系集,P是对D的基本操 作集。
数据结构: 数据对象在计算机中的组织方式 定义在数据对象之上的操作
7/25
第1章 概论
§2.1 术语定义
数据对象在计算机中的组织方式:逻辑结构、存储结构。
逻辑结构:数据元素间抽象化的相互关系。与数据的存储 无关,独立于计算机,它是从具体问题抽象出来的数学模型。 分为“集合”、―线性”、“树”和“图”。例1中按方 法1来处理,就是把图书集看成是线性的结构;按方法 3来处理,就是把图书集看成是树型的结构。
第1章 概论
§1 引子
为什么要学数据结构?

考研课程 计算机等级考试课程 程序员考试课程 编程基础 N.沃思(Niklaus Wirth)教授提出:
程序=算法+数据结构

实际应用需求 数值计算→非数值计算
第1章 概论
§1 引子
什么是数据结构?
【定义】“数据结构是计算机中存储、组织数据的方式。 精心选择的数据结构可以带来最优效率的算法。”
4/25
第1章 概论 代码1.6 测试函数function()的运行时间
#include <stdio.h> #include <time.h>
§1 引子
clock_t start, stop; /* clock_t是clock()函数返回的变量类型 */ 秦九韶算法的计算速度明显比 double duration; /* 记录被测函数运行时间,以秒为单位 */
常,数据在存储器中的存储有两种基本的映像方法。
(1)顺序存储结构(Sequential Storage Structure):把逻辑上 相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由
存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构,
它主要用于线性数据结构,非线性的数据结构也可以通过某种线性化 的方法来实现顺序存储。
[例1.1] 该如何摆放书,才能让读者很方便地找到你手里这本 《数据结构》?
1/25
第1章 概论
§1 引子
【分析 】
[方法1] 随便放----任何时候有新书进来,哪里有空就把书插到哪里。 查找效率极低!
[方法2] 按照书名的字母顺序排放。
有时插入新书很困难!
[方法3] 把书架划分成几块区域,每块区域指定摆放某种类别的图书; 在每种类别内,按照书名的拼音字母顺序排放。
相关文档
最新文档