数据结构(C 语言描述)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“图状结构”,它是一种多对多的数据结构。
2.2 数据结构的分类:存储结构
数据的存储结构(又称物理结构)取决于四种基本的存储
方法:顺序存储、链接存储、索引存储、散列存储。 顺序存储是把逻辑上相邻的结点存储在物理位置相邻的存 储单元里。结点之间的逻辑关系用存储单元的邻接关系来 体现。 链接存储对逻辑上相邻的结点不要求在存储的物理位置上 相邻,结点之间的逻辑关系由附加的指针来表示。 索引存储是在存储结点数据的同时,还建立附加的索引表。 索引表的每一项称为索引项。一般情况下索引项由关键字 和地址组成。 散列存储是根据结点的关键字计算出该结点的存储地址。 同一种逻辑结构采用不同的存储方法,可以得到不同的存 储结构。一种逻辑结构可采用一种方法存储,也可采用多 种方法组合起来进行存储。
2.3.1 两种软件设计方法 2.3.2 数据类型 2.3.3 抽象数据类型
2.3.1 两种软件设计方法
面向过程的程序设计:是传统的设计方法,它把软件
看成一个处理过程,将软件分解成为若干个表示过程 步骤的模块,然后由编程语言的构件(子程序和函数) 来实现。 面向对象的程序设计:将软件看成由数据对象组成的 集合,这些对象是应用问题所涉及的物理实体的数据 模型,它们之间的相互作用构成了一个软件系统。 面向对象的软件设计方法优于传统的软件设计方法, 因为面向对象的软件设计方法采用了抽象数据类型的 描述方式,实现了数据抽象和信息隐蔽。
2.3.3 抽象数据类型
抽象是指从特定的实例中抽取共同的性质以形成一般化
概念的过程。抽象是对某系统的简化描述,即强调该系 统中的某些特性,而忽略一部分细节。对系统进行的抽 象描述称为对它的规范说明,对抽象的解释称为对它的 实现。 数据抽象是一种对数据和操作数据的算法的抽象。数据 抽象包含了模块化和信息隐蔽两种抽象。模块化和信息1001 1002 1003 1004 1005
K1 K2 K3 K4 K5
1001
1002 1003 1004 1005 1006 1007
k2
k1 k5 k4 k3
1007
1001 ^ 1004 1005
(a) 顺序存储
2001 key1 1001 2002 Key
2 1005
(b) 链接存储
K1
K4 K3 K5 K2
1001 1002 1003 1004 1005
d2 d5 d1 d4 d3
k2 k5 … k1 k4 k3
2003 key3 1003 2004 key4 1002 2005
Di=h(keyi)
(c) 索引存储
key5 1004
(d) 散列存储
2.3 抽象数据类型
2.2 数据结构的分类:逻辑结构
如果一个数据结构中的两个结点k、k’之间存在的关系
可用有序对 <k, k’>表示,则称 k’是 k的后继,k是k’ 的前驱,k和k’互为相邻结点。如果k没有后继,则k 称为终端结点。如果k没有前驱,则称k为开始结点。 如果k既不是终端结点,也不是开始结点,则称k为内 部结点。 数据的逻辑结构分为线性结构和非线性结构两大类。 非线性结构又分为树型结构和图状结构。
数据结构(C++语言描
述)
教学演示文稿
数据结构课程要研究的主要问题:
现实世界中的实际问题必须经过抽象,得出 反映实际事物本质的数据表示后,才能被计算机 处理。 如何用计算机所能接受的形式来描述这些数 据,如何将这些数据以及它们之间的关系存储在 计算机中,以及如何用有效的方法去处理这些数 据,是数据结构课程要研究的主要内容。
长率,因而在难以精确计算基本操作执行次数的情况下, 只要求出它关于 n 的增长率即可。我们可以在计算任何算 法运行时间代价时,忽略所有的常数和低次项,用O表示 法来表示算法的时间复杂度,它只是一个数量级概念。
算法 2.2 计算两个n×n矩阵的乘积
Void MatrixMultixMultiply ( int A[n][n] , int B[n][n] , int C[n][n] )
2.4 算法和算法分析
2.4.1 算法概念 2.4.2 算法分析
2.4.1 算法概念
算法是一个有穷的指令集,这些指令为解决某一特定
任务规定了一个运算系列。 一个算法应当具有以下的基本特性:
(1)输入 (2)输出 (3)确定性 (4)有穷性 (5)可行性
算法的描述有多种方法,如自然语言方式、图形方式、
线性结构
线性结构有且仅有一个开始结点和一个终端结点,并且所有的结点最 多只有一个前驱和一个后继。线性表是典型的线性结构。
线性表 一个学校所有学生的各种特征可用以下表格来记录: 学号 姓名 性别 出生年月 系 班级 … 030401 张三 男 1985.1 计算机 0304 … 030402 李四 女 1984.12 计算机 0304 … 030403 王五 男 1984.6 计算机 0304 … 030404 赵六 男 1985.4 计算机 0304 … … … … … … … … 该表为一个数据结构,其中列称为“字段”,行称为“记录”,记录之 间有一对一的线性关系,称为“线性结构”。
2.1 基本概念
2.1.1 数据、数据元素、数据对象 2.1.2 数据结构
2.1.1 数据、数据元素、数据对象
数据 (data) 是对客观事物的符号表示,是对现
实世界的事物采用计算机能够识别、存储和处 理的形式进行描述的符号的集合。 例如:科学计算软件处理的是数值数据;文字 处理软件处理的是字符数据;多媒体软件处理 的是图象、声音等多媒体数据。 数据元素 (data element) 是数据的基本
表格方式等。本教材采用C++程序语言来描述算法。
2.4.2 算法分析
人们常用以下几个标准来衡量一个算法的优劣:
(1) 正确性 (2) 可读性 (3) 健壮性 (4) 时间效率和存储占用量
1. 估计算法运行时间的方法
基本考虑是:撇开所有与计算机硬件和软件有关
的因素,只确定依赖于问题的“规模”(通常用n 表示) 和算法执行“基本操作”的次数。规模一 般指输入量的数目,如被排序元素的数目;基本 操作一般指定义在某个数据类型上的标准操作, 如整数相加、比较大小等。 一个算法是由控制结构 (顺序、选择、循环) 和原 操作 (加、减、乘、除等) 构成的。算法的效率取 决于二者的综合效果。一般以基本操作重复执行 的次数作为算法运行时间的度量。
2. 算法的时间复杂度
一般情况下,算法中“基本操作”重复执行的次数是问题
规模 n 的某个函数 f(n),算法的时间度量记作
T n O f n
此式表示随时间规模 n 的增大,算法执行时间的增长率与 O f(n) 的增长率相同, f n 称为算法的时间复杂度。 由于算法的时间复杂度分析只考虑相对于问题规模 n 的增
2.1.2 数据结构
涉及到计算机的数据结构概念,至今尚未有一个公认
的标准定义,但一般认为应包括以下三个方面: (1)数据元素与数据元素之间的逻辑关系,也称为数据 的逻辑结构,它独立于计算机; (2)数据元素与数据元素之间的关系在计算机中的存储 表示,也称为数据的存储结构或物理结构,它依赖于 计算机; (3)数据的运算,即对数据施加的操作。
树状结构
树状结构中,一个结点最多只有一个前驱,而可以有多
个后继。它是最重要的非线性结构。 一个学校的组织机构可用以下数据结构来表示:
学校
计算机系
基础教研室 教师甲 教师乙
金融系
会计系
保险系
... ...
电子商务教研室 教师丙
... ... ... ...
...
该数据结构的“结点”具有一对多的逻辑关系,就象一
棵倒挂的树,故称为“树状结构”。
图状结构
图状结构中,对结点的前驱和后继的个数没有限制,结
点之间的关系是任意的。它是最一般的非线性结构。 在 n 个城市间建立通信网络,要求在任意两个城市之间 都有直接或间接的通信线路,该通信线路可用以下图形 来表示: B E
A D G
C
F
如果每个城市为一个结点,则结点之间的逻辑结构称为
封装的矩形数据和操作的抽象数据类型如下:
ADT Rectangle { Data 非负实数,给出矩形的长和宽 Operation Area Input: 无 Preconditions: 无 Process: 计算矩形的面积 Output: 返回面积值 Postconditions: 无 Perimeter Input: 无 Preconditions: 无 Process: 计算矩形的周长 Output: 返回周长值 Postconditions:无 }
2.1.2 数据结 构
从数学意义上讲,数据结构是指数据的组织形
式,由数据对象及该对象中数据元素之间的关 系组成。数据结构可描述为一个二元组
Data-Structure=(D,R)
其中:D是数据对象,为数据元素的有限集; R是该对象中数据元素之间关系的有限集。 这种意义上的数据结构称为数据的逻辑结构。 除此之外,要将数据放在计算机内进行处理, 还将涉及数据的存储结构。
表2-1 学生情况表
姓名 性别 年龄 籍贯 班别 成 绩
数学
物理
化学
外语
张三 李四
女 男
18 20
北京 上海
6003 6001
80 75
90 80
70 90
75 80
王五
…
男
…
19
…
长沙
…
6002
…
85
…
80
…
75
…
90
…
一个数据元素
一个初等数据项
一个组合数据项
整张表就是一个数据对象,其中每个学生的情况是其 中的一个数据元素。
2.3.3 抽象数据类型
抽象数据类型(Abstract Data Type,简称ADT)是
指抽象数据的组织和与之相关的操作。可看做是数据的 逻辑结构及在逻辑结构上定义的操作。 在C++中,用类的说明来表示ADT,用类的实现来实现 ADT,C++中实现的类相当于数据的存储结构及其在存 储结构上实现的对数据的操作。ADT和类的概念反映了 软件设计的两次抽象:ADT相当于在概念层(抽象层) 上描述问题,而类相当于在实现 层上描述问题。
// 数据说明 // 操作说明 // 操作1,求面积
//操作2,求周长
封装的矩形数据和操作的抽象数据类型用C++中类(class)表示如下:
class Rectangle { private : float length , width ; public : Rectangle( float l , float w) ; float Area(void) const ; float Perimeter(void) const ; }; Rectangle :: Rectangle(float l , float w ) : length(l) , width(w) {} float Rectangle :: Area(void) const {return length * width ; } float Rectangle :: Perimeter(void) const {return 2.0*(length+width);}
单位,也称结点,在一个计算机程序中 通常作为一个整体进行考虑和处理。数 据元素也称结点。
2.1.1 数据、数据元素、数据对象
一个数据元素可以由若干个数据项 (data item) 组成。
数据项包括两种:初等项(是数据不可分割的最小单 位)、组合项(由若干个数据项组成)。 在数据库语言中,数据项称为“字段”,而数据元素 称为“记录”。 数据对象 (data object) 是性质相同的数据元素的集合, 是数据的一个子集。例如整数对象、实数对象、字符 对象等。
2.3.2 数据类型
数据类型 (data type) 是一组性质相同的值的集合以及定义在
这个集合上的一组操作的总称。 按值的不同特性,数据类型可以分为两类: (1) 基本类型:如整型、实型、字符型等,通常由程
序语言直接提供。 (2) 组合类型:由一些基本类型组合构造而成,如记 录、数组、结构等,由用户借助程序 语言提供的描述机制自己定义。