数据结构概论

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T (n) 常数 0 n->∞ F (n) lim
则称函数T(n)与F(n)是同阶的,或者说T(n)和F(n)只相差一 个常数倍,其数量级是相同的,记做: O(F(n))=T(n) 将O(F(n))称做算法的渐进时间复杂度,简称为算法的时间 复杂度或时间复杂性.
练习:求下列程序段的时间复杂度。
1. for (i=0; i<n; i++)
for (j=0; j<m; j++)
A[i][j]=0;
2. i=1;
while(i<=n)
i=i*3;
补充:
最好的时间复杂度
最坏的时间复杂度
平均时间复杂度
【例1.17】下面算法是在数组r中查找关键字值为x的记录。 若查找成功,则函数返回该关键字的位置i(1≤i≤n); 否则函数返回0。请给出该算法的时间复杂度。 /* 在数组r中顺序查找关键字值为x的结点 */ int sequent_search(r, x) rectype r[n+1]; /* 查找成功返回数组下标失败返回-1 */ int x; { int i=n; /* 表实际长度为n,从表尾开始查找 */ r[0].key=x; /* 将r[0]设置为监视哨 */ while(r[i].key!=x) i=i-1; if (i==0) return (-1); /* 查找失败函数返回-1 */ else return(i); /* 查找成功返回该关键字下标 */ }/* SEQUENT_SEARCH */
1.3.2 算法的特性
1、可行性(能行性)
算法中的每一个步骤必须能够实现,算法执行的 结果能够达到预期的目的。
2、确定性 算法中每一条指令必须有确切的含义,不存在二 义性,且算法只有一个入口和一个出口。
3、有穷性
一个算法必须总是在执行有穷步之后结束,且每 一步都在有穷时间内完成。
4、输入 一个算法应有零个或多个的有效输入,这些输入 取自于某个特定的对象集合。 5、输出 一个算法应有一个或多个的输出,这些输出是同 输入有着某些特定关系的量。 综上所述,所谓算法是一组严谨地定义运算顺序 的规则,并且每一个规则都是有效的、明确的, 此顺序将在有限的次数下终止。
【例1.12】给出一个正整数n,判定它是否为 素数。 算法分析: 素数亦称质数,判断一个数n是否是素数方法 是:将n被2, 3, …, n1除,如果都除不尽, 则n必为素数。
求素数算法的C语言描述如下:
#include "math.h" void prim() /* 判断一个正整数是否为素数算法 */ { int n, i, k; printf("请输入一个正整数n:"); scanf("%d", &n); k=sqrt(n); /* n依次被2~sqrt(n)除,若除不尽,则n必为素数 */ for (i=2;i<=k;i++) if(n%i==0) break; if(i>k) printf(“n=%d是个素数!\n”, n); /* n是素数 */ else printf("n=%d不是素数!\n", n); /* n不是素数 */ }/* PRIM */
R——D中各数据元素间关系的集合,用二元组表示。
(6)数据处理: 指对数据进行检索、插入、删除、合并、排序、 统计、简单计算、转换、输入和输出等操作过 程。 数据结构是进行数据处理的软件基础
(7)数据结构的图形表示
(放在 第8章 图 讲!)
1.2.2
数据的逻辑结构
1、数据的逻辑结构分类:
线性结构: 除第一个和最后一个数据元素外,线 性结构中每一个数据元素仅有一个直接前驱和 一个直接后继。线性结构也称为线性表。
1.顺序存储方法
顺序存储方法 是将逻辑上相邻的结点存储在物理位置上亦 相邻的存储单元里,也就是将所有存储结点相继 存放在一个连续相邻的存储区里。
顺序存储结构通常可用C语言的数组来描述。
【例 1.7】请用顺序存储方式表示一周7天,假设 一周7天的数据结构为: B=(D, R) D={Sun, Mon, Tue, Wed, Thu, Fri, Sat} R={<Sun, Mon>,<Mon, Tue>,<Tue, Wed>, <Wed, Thu>,<Thu, Fri>,<Fri, Sat>} 若采用顺序存储方法将一周7天存储在计算机中, 其顺序存储结构如下图所示。
表中每个学生记录所组成的数据结构可表示为:
B= (D, R) D={胡桃,黎明,肖红,唐平,程程,房芳} R={〈胡桃,黎明〉,〈黎明,肖红〉,〈肖红,唐平〉, 〈唐平,程程〉,〈程程,房芳〉}
例:用图形表示下列数据结构,并指出它们是属 于线性结构还是非线性结构。
B= (D, R) D= {祖父,叔叔,父亲,儿子,女儿,孙子} R= {〈祖父,父亲〉,〈祖父,叔叔〉,〈父亲,儿
数据类型可以分为两类: 原子数据类型 结构数据类型。
(5)数据结构、数据的逻辑结构和物理结构 数据结构:是指某一数据对象及该对象中所有
数据元素之间的关系组成。
逻辑结构:数据元素之间的相互关系称为数据
的逻辑结构。
物理结构:数据及其关系在计算机中的存储方式。
数据逻辑结构的二元组表示
数据的逻辑结构可以看成从具体问题抽象出来的 数学模型,因此,可用二元组表示:
另一类是非数值型数据
(2)数据元素:是数据的基本单位,亦称为结 点、元素、顶点和记录等,在计算机程序中通 常作为一个整体进行考虑和处理。
有时一个数据元素可由若干个数据项组成。数
据项是具有独立意义的最小的数据单位,是不 可以再分的。
表 1.4 考生成绩统计表
外 语 135 130 100 130 110 100 数 学 140 140 126 130 120 90 准 考 证 号 20006 20004 20001 20003 20002 20005 姓 名 语 文 110 100 120 90 100 80 物 理 130 116 100 100 90 80 化 学 120 122 120 95 100 85 总 分 635 608 566 545 520 435 胡桃 黎明 肖红 唐平 程程 房芳
B = (D, R)
式中B——表示数据结构;
D——是某一数据对象,是数据元素的集合; R——D中各数据元素间关系的集合,用二元组表示。
例:一年四季名称组成的数据结构可表示为:
B = ( D, R )
D= {春,夏,秋,冬}
R= {〈春,夏〉,〈夏,秋〉,〈秋,冬〉}
B——表示数据结构;
D——是某一数据对象,是数据元素的集合;
1.3.3 算法设计的要求
(1)正确性。
(2)健壮性。
(3)时间效率高。
(4)存储空间少。
(5)可读性。
(6)简单性。
1.3.4 算法时间复杂度的度量
1. 算法的时间效率也称为时间复杂性或时间复杂 度,它是算法运行时间的相对度量。 2. 一个算法的运行时间是指在计算机上从算法开 始运行到结束所花费的时间,
第1章 绪论
2018/10/21
数据结构
第1章概述
1wenku.baidu.com
数据结构课程的形成和发展:
形成阶段:
60年代初期,“数据结构”有关的内容散见于操作 系统、编译原理和表处理语言等课程。1968年, “数据结构”被列入美国一些大学计算机科学系的 教学计划。
发展阶段:
数据结构的概念不断扩充,包括了网络、集合代数 论、关系等“离散数学结构”的内容。
非线性结构: 一个数据元素可能有多个直接前 驱和直接后继。
数据的逻辑结构也可分为:
集合、线性结构、树状结构、网状结构
0-0
1-1
1-N
N-N
注:集合中任何两个结点之间都没有逻辑关系,组 织形式松散。
数据的逻辑结构实例:
【例1.4】下面是考试成绩统计表
表 1.4 考生成绩统计表
准 考 证 号 20006 20004 20001 20003 20002 20005 姓 名 语 文 110 100 120 90 100 80 外 语 135 130 100 130 110 100 数 学 140 140 126 130 120 90 物 理 130 116 100 100 90 80 化 学 120 122 120 95 100 85 总 分 635 608 566 545 520 435 胡桃 黎明 肖红 唐平 程程 房芳
1.数据结构的基本概念。 (1)数据 (2)数据元素 (3)数据对象 (4)数据类型 (5)数据结构 (6)数据处理 (7)数据的图形表示
1.2 .1 数据结构的基本术语
(1)数据:数据是信息的载体,是描述客观事物 的数、字符,以及所有能够输入到计算机中并被 计算机程序识别和处理的一切对象。
数据大致分为两类:一类是数值型数据
语句频度:算法中每条语句的执行次数与其执行
一次所需时间的乘积。
语句频度就是该语句重复执行的次数。因此,一
个算法所耗费的时间就是该算法中所有语句频度 之和。
【例1.13】下面算法为求n个自然数的和
S=1+2+3+…+n。请给出该算法的语句频
度。
sum( int n) { int i, s=0; ┆语句执行次数 ┆1 次
70年代后期,我国高校陆续开设该课程。
学习数据结构的目的:
学会根据数据处理问题的需要,为待处理的数 据选择合适的逻辑结构和存储结构,从而设计出比
较满意的算法(程序)。
第1章 概论
1.2
1.2.1
数据结构的基本概念
数据结构的基本术语
1.2.2
1.2.3
数据的逻辑结构
数据的存储结构
1.2 数据结构的基本概念
解决一个问题的过程就是实现一个算法的 过程。 计算机算法就是计算机能够实现的算法。 例如,让计算机执行 S = 1+2+3+4+…+100运算 是可以实现的,而让计算机执行“打太极拳” 算法是不行的。
算法分类:
数值算法和非数值算法
算法描述方法:通常算法描述方法有以下4种:
① 流程图: ② 自然语言: ③ 伪代码: ④ 程序设计语言: 不管用哪种方式描述算法,惟一的要求是: 能够精确地描述计算过程。
R={<d1,d3>,<d1,d8>,<d2,d3>,<d2,d4>,<d2,d5>, <d3,d9>, <d5,d6>,<d8,d9>,<d9,d7>, <d4,d7>, <d4,d6)>}
1.2.3
数据的存储结构
数据在计算机中的存储方式有多种: 顺序 链接 索引 散列 因此,同一种数据的逻辑结构可以根据需要表 示成任意一种或几种不同的存储结构。
图1.7
线性结构的顺序存储结构示例
2.链接存储方法
链接存储方法:
在存储每个结点信息的同时,需要增加一个 指针来表示结点间的逻辑关系。
在链式存储方式中每个结点有两部分组成: 数据域 指针域
【例 1.8】请用链接存储方式表示一周7天,假设 一周7天的数据结构为: B=(D, R) D={Sun, Mon, Tue, Wed, Thu, Fri, Sat} R={<Sun, Mon>,<Mon, Tue>,<Tue, Wed>, <Wed, Thu>,<Thu, Fri>,<Fri, Sat>} 该数据结构的链接存储结构如下图所示:
(3)数据对象:是具有相同性质的数据元素的 集合,是数据的一个子集。
一年四季的名称所组成的数据对象可以是集合
S={春,夏,秋,冬}
家庭成员名称所组成的数据对象可以是集合
F={ 祖 父 , 父 亲 , 叔 叔 , 儿 子 , 女 儿 , 孙
子,…}。
(4)数据类型:是具有相同性质的计算机数据 的集合和定义在这个数据集合上的一组操作 的总称。
head sun mon tue wed thu fri Sat ∧
1.3 算法性能分析与度量 1.3.1 算法和算法的描述方法 1.3.2 算法的特性
1.3.3 算法设计的要求
1.3.4 算法时间复杂度的度量
1.3.5 算法存储空间的需求
1.3.1 算法和算法的描述方法
算法:对特定问题求解步骤的一种描述。
for(i=1;i<=n;i++)
s=s+i;
┆n+1次
┆n次
printf("%d\n", s);
}/* SUM */
┆1次
算法的语句频度: T(n)=1+1+n+n+1=2n+3
渐进时间复杂度O(n):要精确地计算出一个算法的语句频度
有时是相当烦琐的,也没必要。实际上,只要大致估计出相 应算法的时间复杂度的数量级(Order)即可。若算法的语 句频度为T(n),有某个辅助函数 F(n),使得当问题规模n趋 于无穷大时,则有
子〉,〈父亲,女儿〉,〈儿子,孙子〉}
练习:设有数据逻辑结构B=(D,R),试按各小题所给条 件画出这些逻辑结构的图示,并确定相对于关系R,哪 些结点是开始结点,哪些结点是终端结点? 1、D={d1,d2,d3,d4} R={<d1,d2>,<d2,d3>,<d3,d4> } 2、D={d1,d2,…,d9}
相关文档
最新文档