数据结构的抽象描述
掌握并简单应用常用的排序、检索和索引算法和方法。
掌握基本的算法设计和分析技术,并对自己设计的数 据结构和算法进行简单的分析。
在进行程序设计、调试、测试的课程项目训练(即上 机实习训练)过程中,要求学生综合应用所学到的数 据结构和算法知识,学会分析研究数据对象的特性, 以便选择合适的数据结构和存储结构以及相应的算法, 合理地组织数据、有效地表示数据、有效地处理数据, 书写的程序结构清楚、正确易读,提高程序设计的质 量。
4. 数据类型(data type)
是一组性质相同的值的集合以及定义于这个值集合上的一 组操作的总称。
例如,高级语言中用到的整数数据类型,是指由-32768 到32767中值构成的集合及一组操作(加、减、乘、除、 乘方等)的总称。
5. 数据结构(data structure)
是指相互之间存在一种或多种特定关系的数据元素所组成的 集合。具体来说,数据结构包含三个方面的内容,即数据的 逻辑结构,数据的存贮结构和对数据所施加的运算。这三个 方面的关系为:
数据封装: 将实体的外部特性和其内部实现细节分离, 并且对外部用户隐藏其内部实现细节。。
1.3 抽象数据类型的表示与实现
抽象数据类型可通过固有数据类型来表 示和实现,即利用处理器中已存在的数 据类型来说明新的结构,用已经实现的 操作来组合新的操作。
P10
1.4 算法和算法分析
1.4.1 算法(algorithm)
参考资料:
1、许卓群、杨冬青等,数据结构与算法.高等教育出版 社.
2、殷人昆、陶永雷等,数据结构—用面向对象方法与C++ 描述,清华大学出版社
3、[美]Bruno R.Preiss著,胡广斌、王崧等译,数据结构与 算法—面向对象的C++设计模式 4、杨明、杨萍,数据结构学练考,清华大学出版社 5、李春葆,数据结构习题与解析,清华大学出版社 6、 7、http::///datastructure/default.asp 8、西北大学数据结构:/datastr 9、编程爱好者网站:
第1章 绪论
什么是数据结构 基本概念和术语 抽象数据类型的表示与实现 算法和算法分析
1.1什么是数据结构
一般来说,用计算机解决一个具体问题时, 需经历下列步骤:
建立数学模型设计解此模型的算法编程、 调试
寻求数学模型的实质:分析问题,从中提取 操作的对象,并找出对象之间的关系,然 后用数学的语言加以描述。
非数值计算的程序设计问题
例比较两个数的大小” 模型: 取决于整数值的范围
例2:计算机对弈 算法: 对弈的规则和策略 模型: 棋盘及棋盘的格局 例3:足协的数据库管理 算法: 需要管理的项目?如何管理?用户界面? 模型: 各种表格
概括地说:
数据结构是一门研究非数值计算的程序 设计问题中计算机的操作对象以及它们 之间的关系和操作等的学科。
a1
a2
a3
a4
a5
例2 设一个数据结构的抽象描述为D=(K,R),其中 K={a,b,c,d,e,f,g,h},r={<a,b>,<a,c>,<a,d>,<b,e>,< c,f>,<c,g>,<d,h>},则它的逻辑结构用图描述见图1-5。
例3 设一个数据结构的抽象描述为D=(K,R),其中 K={1,2,3,4},而R={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}, 则它的逻辑结构用图描述见图
通俗地讲,算法就是一种解题的方法。更严格地说,算法是由 若干条指令组成的有穷序列,它必须满足下述条件(也称为 算法的五大特性):
(1)输入:具有0个或多个输入的外界量(算法开始前的初始 量)
(2)输出:至少产生一个输出,它们是算法执行完后的结果。
(3有穷性:每条指令的执行次数必须是有限的。
(4)确定性:每条指令的含义都必须明确,无二义性。
(1)数据的逻辑结构独立于计算机,是数据本身所固有的。
(2)存贮结构是逻辑结构在计算机存贮器中的映像,必须依 赖于计算机。
(3)运算是指所施加的一组操作总称。运算的定义直接依赖 于逻辑结构,但运算的实现必依赖于存贮结构。
从逻辑结构划分数据结构
数据结构从逻辑结构划分为:
(1)线性结构
元素之间为一对一的线性关系,第一个元素无直接 前驱,最后一个元素无直接后继,其余元素都有 一个直接前驱和直接后继。
数 据 结 构(C语言版)
严蔚敏 吴伟民编著 清华大学出版社
洛阳师范学院计算机科学系
数据结构课程的地位和作用
“数据结构课程”是计算机专业的专业基础课。
学习“数据结构”课程需要一些课程作为它的基础,如“C语 言”与“离散数学”。若没有“C语言”或其它语言基础,学 生就难以理解描述数据结构及其算法的类C或类C++,更重要 的是造成学生上机环节的困难,影响该课程的学习。同样, “离散数学”课程是“数据结构”课程的理论基础,其中集合、 树及图等重要理论知识为“数据结构”课程的学习提供了重要 的理论基础。
GetImag(Z,&ImagPart) 初始条件:复数已存在 操作结果:用ImagPart返回复数Z的虚部值
Add(Z1,Z2,&sum) 初始条件:Z1,Z2是复数 操作结果:用sum返回两个复数Z1,Z2的和值
}//ADT Complex
ADT有两个重要的特征:
数据抽象: 用ADT描述程序处理的实体时,强调的是其 本质的特征、其所能完成的功能以及它的外 部用户接口(即外界使用它的方法)。
(2)非线性结构
元素之间为一对多或多对多的非线性关系,每个元 素有多个直接前驱或多个直接后继。
从存贮结构划分数据结构
数据结构从存贮结构划分为: (1)顺序存贮(向量存贮) 所有元素存放在一片连续的存贮单元中,逻辑上相邻的
元素存放到计算机内存仍然相邻。 (2) 链式存贮 所有元素存放在可以不连续的存贮单元中,但元素之间
Niklaus Wirth: Algorithm+Data Structure=Programs
程序设计: 为计算机处理问题编制的一组指令集
算法:处理问题的策略 数据结构:问题的数学模型
例如:数值计算的程序设计问题 结构静力分析计算 ————线性代数方程组
全球天气预报 ————环流模式方程 (球面坐标系)
数据结构的抽象描述
数 据 结 构 可 用 二 元 组 D=(K,R) 的 形 式 来 描 述 。 其 中 , K={a1,a2,…,an}为元素集合,R={r1,r2,…,rm}为关系的集合。
例1 设有一个线性表(a1,a2,a3,a4,a5),它的抽象描述可表示为 D=(K,R),其中 K={a1,a2,a3,a4,a5},R={<a1,a2>,<a2,a3>,<a3,a4>,<a4,a5>}, 则它的逻辑结构用图描述见图:
数据结构是介于数学、计算机硬件和计 算机软件三者之间的一门核心课程。
1.2 基本概念和术语
1. 数据(data)
数据是指能够输入到计算机中,并被计算机识别和处理 的符号的集合。是计算机操作的对象的总称。
例如:数字、字母、汉字、图形、图像、声音都称为数 据。
2.数据元素(data element) 数据元素是组成数据的基本单位。
建立数学模型设计解此模型的算法编程、调试
而数据结构几乎体现在问题求借的各个步骤,尤其是步骤2。
数据结构的教学目的
懂得“数据结构+算法=程序” 培养数据抽象的能力 把数据结构和算法理论与编程实践相结
合,能够在实际的工程实践中灵活地予 以应用。
数据结构的教学要求
掌握并灵活应用常用的基本数据结构的抽象数据类型、 各种基本存储方法、主要的算法。
|e2是复数的虚数部分} 基本操作: AssignComplex(&z,v1,v2)
操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和v2的值。 DestroyComplex(&Z)
操作结果:复数Z被销毁
GetReal(Z,&RealPart) 初始条件:复数已存在 操作结果:用RealPart返回复数Z的实部值
可读性
健壮性 当输入数据非法是,算法也能适当地作出反 应或进行处理,而不会产生莫名其妙的输出结果。
效率与低存储量需求 效率指的是算法执行时间。存 储量需求指算法执行过程中所需要的最大存储空间。
1.4.3 算法效率的度量
时间复杂度
1. 时间频度
一个算法执行所耗费的时间,从理论上是不能算出来的,必 须上机运行测试才能知道。但我们不可能也没有必要对每 个算法都上机测试,只需知道哪个算法花费的时间多,哪 个算法花费的时间少就可以了。并且一个算法花费的时间 与算法中语句的执行次数成正比例,哪个算法中语句执行 次数多,它花费时间就多。一个算法中的语句执行次数称 为语句频度或时间频度。记为T(n)。
“数据结构”课程为“编译原理”、“数据库系统”和“操作
系统”等课程的学习奠定必要的基础。例如:“编译原理”的 表达式求解用到“数据结构”的栈知识,符号表管理技术用到 哈希查找技术;“数据库系统”的存储用到B+树知识;“操作 系统”的设备链表管理用到线性链表知识,最短作业优先用到 队列知识。
计算机解决现实问题的方法一般经历下列步骤:
的关系可以通过地址确定,逻辑 上相邻的元素存放到计算机内存后不一定是相邻的。
(3)索引存贮
使用该方存放元素的同时,还建立附加的索引表,索引表 中的每一项称为索引项,索引项的一般形式是:(关键字, 地址),其中的关键字是能唯一标识一个结点的那些数据 项。
(4)散列存贮
通过构造散列函数,用函数的值来确定元素存放的地址。
(5)可行性:每条指令的执行时间都是有限的。