自学考试:数据结构导论课件.pdf
《自学考试:数据结构导论课件.pdf》由会员分享,可在线阅读,更多相关《自学考试:数据结构导论课件.pdf(139页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 需要把原始数据按照某种方式组织起来,以便很好地体现数据之间的关系,数据及数据的组 在每个步骤中,数据的表现形式都不相同,实际问题中的数据称为原始数据。在数学模型中, (3)用某种计算机语言编写实现该算法的程序,调试和运行程序直至最终得到问题的解答。 (2)设计一个求解该数学模型的算法; (1)从具体的问题抽象出一个适当的数学模型; 1、计算机解决一个具体问题时,一般需要经过以下几个步骤: 第一节 引言 们在计算机内的存储方式,以及定义在该组数据上的一组操作。 更进一步地说,数据结构是指一组相互之间存在一种或多种特定关系的数据的组织方式和它 简单地说,数据结构是计算机组织数据和存储数据的方式
2、。 第零节 概论 第一章 概论 2 数据的存储结构和数据的基本运算。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。它包括数据的逻辑结构、 数据元素组成,而数据元素又可由若干个数据项组成。 从宏观上看,数据、数据元素和数据项实际上反映了数据组织的三个层次,数据可由若干个 它是数 据的不可分割的最小标识单位。 (3)数据项:一般情况下,数据元素由数据项组成。在数据库中数据项又称为字段或域。 运算的基本单位,通常具有完整确定的实际意义。数据元素常常又简称为元素。 (2)数据元素:数据的基本单位,在程序中作为一个整体而加以考虑和处理。数据元素是 (1)数据:所有被计算机存储、处理的对象。
3、 一、数据、数据元素和数据项 第二节 基本概念和术语 法+数据结构=程序。该公式简洁地描述了算法、数据结构和程序之间关系。 2、1976年瑞士计算机科学家尼克劳斯维尔特(NiklausWirth)曾提出一个著名公式:算 存储的存储结构。如下图: 织方式称为数据的逻辑结构。为了能用计算机加工处理,逻辑结构还必须转换为能被计算机 3 (1)存储数据元素; 一个存储结构包括以下两个部分: 1、数据的逻辑结构在计算机中的实现称为数据的存储结构(或物理结构)。一般情况下, 三、数据的存储结构 (4)图结构最复杂,其中任何两个结点都可以相邻接。 结点相邻接,但下层结点只能和上层的一个结点相邻接。 (3)树
4、形结构具有分支、层次特性,其形态像自然界中的树,上层的结点可以和下层多个 (2)线性结构中结点按逻辑关系依次排列形成一条“链”,结点之间一个一个依次相邻接。 (1)集合中任意两个结点之间都没有邻接关系,组织形式松散。 2、根据数据元素之间的关系,有四类基本的逻辑结构: 方式或“邻接关系”。 1、数据的逻辑结构是指数据元素之间的逻辑关系。所谓逻辑关系是指数据元素之间的关联 二、数据的逻辑结构 4 心概念。 运算的实现是指该运算的算法。算法是计算机科学的一个基本概念,也是程序设计的一个核 (一)算法的概念 第三节 算法及描述 它们是不同的数据结构。 2、线性表、栈和队列中的元素具有相同的逻辑结构(
5、即线性结构),但有不同的运算集, 查找、读取、插入和删除等。 结构为对象。一般来说,在每个逻辑结构上,都定义了一组基本运算,这些运算包括:建立、 1、运算是指在某种逻辑结构上施加的操作,即对逻辑结构的加工。这种加工以数据的逻辑 四、运算 级和语言级上讨论。 储结构称为给定逻辑结构的存储实现或存储映像。如何来描述存储结构呢?可以分别在机器 3、一种逻辑结构可以采用一种或几种存储方式来表达数据元素之间的逻辑关系,相应的存 除了上述两种存储方式之外,还有索引存储方式和散列存储方式。 向一个与本结点有逻辑关系的结点,用指针表示数据元素之间的逻辑关系。 (2)链式存储方式是指每个存储结点除了含有一个数据
6、元素外,还包含指针,每个指针指 相对位置来表示数据元素之间的逻辑关系。 (1)顺序存储方式是指所有存储结点存放在一个连续的存储区里。利用结点在存储器中的 2、表示数据元素之间的关联方式主要有顺序存储方式和链式存储方式。 (2)数据元素之间的关联方式。5 else 语句; if(表达式) 语句; 或 if(表达式) 语句; (1)条件语句: 4、选择语句 变量名=表达式; 3、赋值语句 输出语句:printf(格式串,变量1,变量n); 输入语句:scanf(格式串,变量1,变量n); 2、输入、输出语句 语句序列 /算法说明 函数类型 函数名(函数参数表) 1、函数描述形式 算法可以用某种语言
7、加以描述。本书采用类C语言来描述算法。 (二)算法的描述6 7、出错语句error(“错误描述”) (3)异常结束语句:exit(异常代码); (2)case 结束语句:break; (1)函数结束语句:return表达式; 6、结束语句 while(条件); 语句; do while(条件) 语句; for(赋初值表达式序列;条件;修改表达式序列) 语句; 5、循环语句 default: 语句序列; /可以省略 case 条件n: 语句序列;break; case条件2: 语句序列;break; case条件1: 语句序列;break; switch (2)分支语句:7 时间与n2成正比。
8、如:T(n)=O(n ),这种表示法称为大O表示法,它的含义是:当n充分大时,算法的执行 2 算法的渐进时间复杂度,简称时间复杂度。 不考虑具体的运行时间,只给出算法在问题规模n下执行时间的上界。T(n)=O(f(n)称为 0 对所有nn 成立。其中,f(n)为问题规模n的某个函数。大O表示法也称渐进表示法,它 T(n)cf(n) 大O表示法的具体提法是:当且仅当存在正常数c和n ,使得 0 1、大O表示法 一、时间复杂度 间效率), 前者是算法包含的计算量,后者是算法需要的存储量。 (4)时空性:一个算法的时空性是指该算法的时间性能(或时间效率)和空间性能(或空 到的运行结果。 (3)健壮性
9、:即使输入非法数据,算法也能适当地做出反应或进行处理,不会产生预料不 (2)易读性:易于阅读、理解和交流,便于调试、修改和扩充。 (1)正确性:能正确地实现预定的功能,满足具体问题的需要。 评价算法好坏的因素包括以下几个方面: 第四节 算法分析 多行注释:/* 注释内容 */ 单行注释:/注释内容 8、注释8 常可记为: 1、个算法的空间复杂度定义为该算法所耗费的存储空间,它也是问题规模n的函数。通 二、空间复杂度 程序步的计算机上运行所需要的时间。 4、为了比较不同量级时间复杂度的差异,下表为不同时间复杂度阶数f(n)在每秒20亿个 平均时间复杂度是指,对所有相同输入数据量的各种不同输入数据
10、,算法时间用量的平均值。 最坏时间复杂度是指,对相同输入数据量的不同输入数据,算法时间用量的最大值。 3、最坏时间复杂度和平均时间复杂度 效率的。 通常认为,时间复杂度具有指数阶的算法是实际不可计算的,而阶数低于平方阶的算法是高 (5) 指数阶0(C ),C为大于1的正整数,常见的指数阶有O(2 )。 n n (4) 多项式阶O(n ),C为大于1的正整数,常见的多项式阶有O(n )和O(n ); C 2 3 (3) 线性阶O(n); (2) 对数阶O(log2n); (1) 常数阶O(1)(即算法的时间复杂度与输入规模n无关); 2、时间复杂度常见的阶数 9 的空间。 (3)辅助变量所占用的
11、空间,在估算算法空间复杂度时,一般只需要分析辅助变量所占用 (2)输入数据所占用的空间; (1)程序代码所占用的空间; 期间所需要的存储空间量应包括以下三个部分: 2、空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在执行 其中,g(n)为问题规模n的某个函数。 S(n)=0(g(n)10 D:算法中需要的辅助变量所占用存储空间的大小 C:算法中所占用的所有存储空间的大小 B:算法本身所占用的存储空间的大小 A:算法中输入数据所占用的存储空间的大小 5. 算法的空间复杂度是指() C:O(n2) D:O(2n) A:O(log n) B:O(n) 2 4. 下面几种算法时
12、间复杂度阶数中,最小的是() C:健壮性 D:时空性 A:正确性 B:易读性 果,这种算法好坏的评价因素称为() 3. 即使输入非法数据,算法也能适当地做出反应或进行处理,不会产生预料不到的运行结 C:树形结构 D:图结构 A:集合 B:线性结构 的一个结点相邻接,这种组织形式称为() 2. 具有分支、层次特性,上层的结点可以和下层多个结点相邻接,但下层结点只能和上层 C:数据元素 D:数据变量 A:数据项 B:数据记录 1. 数据的不可分割的最小标识单位是() 【单选题】 章节练习11 7. 链式存储的特点是利用指针来表示数据元素之间的_关系。 6. 计算机图灵奖获得者 N.Wirth曾提出
13、一个著名公式:算法+_=程序。 【填空题】12 所需要的存储空间量应包括以下三个部分: 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量。一个算法在执行期间 解析:一个算法的空间复杂度定义为该算法所耗费的存储空间。 5. 答案:C 解析: 4. 答案:A 或进行处理,不会产生预料不到的运行结果。 解析:通常评价算法好坏的因素包括:健壮性,即使输入非法数据,算法也能适当地做出反应 3. 答案:C 相邻接,但下层结点只能和上层的一个结点相邻接。 解析:树形结构具有分支层次特性,其形态像自然界的树,上层的结点可以和下层多个结点 2. 答案:C 的不可分割的最小标识单位。 解析:一般情况下
14、,数据元素由数据项组成。在数据库中数据项又称为字段或域。它是数据 1. 答案:A 【单选题】 答案及解析 13 向一个与本结点有逻辑关系的结点,用指针表示数据元素之间的逻辑关系。 解析:链式存储方式是指每个存储结点除了含有一个数据元素外,还包含指针,每个指针指 7. 答案:逻辑 算法+数据结构=程序。该公式简洁地描述了算法、数据结构和程序之间关系。 解析:1976年瑞士计算机科学家尼克劳斯维尔特(NiklausWirth)曾提出一个著名公式: 6. 答案:数据结构 【填空题】 (3)辅助变量所占用的空间 (2)输入数据所占用的空间; (1)程序代码所占用的空间;14 (1) 初始化Initia
15、te(L):建立一个空表L=(),L不含数据元素。 3、线性表基本运算及功能描述。 点有且仅有一个直接后继。 接前驱外,其他每个结点有且仅有一个直接前驱;除终端结点没有直接后继外,其他每个结 2、基本特征:线性表中结点具有一对一的关系,如果结点数不为零,则除起始结点没有直 一对相邻结点a 和a i i+1 (1i0时,线性表通常表示成(a ,a 1 2 ,,a ),a n 1 称为起始结点,a n 为终端结点。对任意 点。结点个数n称为表长。当n=0时,线性表不含任何数据元素,称为空表,记为()或。 1、线性表是一种线性结构,它是由n(n0)个数据元素组成的有穷序列,数据元素又称结 第一节 线
16、性表的基本概念 第二章 线性表 15 1、插入 顺序表的“第i个数据元素”存放在数组下标为“i-1”的位置。 二、线性表的基本运算在顺序表上的实现 用顺序存储实现的线性表称为顺序表。一般使用数组来表示顺序表。 点其存储位置也相邻。 数据元素在线性表中的邻接关系决定它们在存储空间中的存储位置,即逻辑结构中相邻的结 线性表顺序存储的方法是:将表中的结点依次存放在计算机内存中一组连续的存储单元中, 一、线性表顺序存储的类型定义 第二节 线性表的顺序存储 a ),表长度减1。 n 删除后线性表L由(a ,a 1 2 ,a i-1 , a ,a i i+1 ,.,a )变为(a n 1 ,a ,a 2
17、i-1 ,a i+1 ,., (6) 删除Delete(L,i):删除线性表L的第i个数据元素a ,i的有效取值范围是1in。 i i+1 1 i-1 i+1 ,.,a ),表长度加 1。 n ,x, a ,a i ,a ,a 2 ,.,a )变为(a n a 参数i的合法取值范围是1in+1。操作结束后线性表L由(a ,a 1 2 ,a i-1 , a , i (5) 插入Insert(L,x,i):在线性表L的第i个数据元素之前插入一个值为x的新数据元素, 值与x相等,运算结果为这些结点中序号的最小值,若找不到该结点,则运算结果为0。 (4) 定位Locate(L,x):查找线性表中数据元
18、素值等于x的结点序号,若有多个数据元素 回一特殊值。 (3) 读表元素Get(L,i):返回线性表第i个数据元素,当i不满足1iLength(L)时,返 (2) 求表长Length(L):返回线性表L的长度。16 点a );表长度减1。此处无需考虑溢出,只判断参数i是否合法即可。算法描述如下: i i+1 n 删除运算的基本步骤是:结点a ,,a 依次向左移动一个元素位置(从而覆盖掉被删结 i-1 i+1 ,.,a )。 n a ,a 度为n的线性表(a ,a 1 2 ,a i-1 , a ,a i i+1 ,.,a )变为长度为n-1的线性表(a n 1 ,a , 2 删除运算DeleteS
19、eqlist(SeqListL,inti)是指将线性表的第i(1in)个数据元素删去,使长 2、删除 L.length+; /表长度加1 L.datai-1=x; /元素x置入到下标为i-1的位置 L.dataj=L.dataj-1; /依次后移 for(j=L.length;j=i;j-) /初始 i=L.length if(iL.length+1) exit(“位置错”);/检查插入位置是否合法 if(L.length=Maxsize) exit(“表已满”); /将元素x插入到顺序表L的第i个数据元素之前 voidInsertSeqlist(SeqListL,DataTypex,inti
20、) 数据元素的位置;然后将x置入该空位,最后表长加1。具体的插入算法描述如下: 插入算法的基本步骤是:首先将结点a a i n 依次向后移动一个元素的位置,这样空出第i个 a )变为长度为n+1的线性表(a n 1 ,a ,a 2 i-1 ,x, a ,a i i+1 ,.,a )。 n n+1)个元素之前,插入一个新元素x。使长度为n的线性表(a ,a 1 2 ,a i-1 ,a ,a i i+1 ,., 顺序表的插入运算InsertSeqlist(SeqListL,DataTypex,inti)是指在顺序表的第i(1i17 elsereturn0; /未查找到值为x的兀素,返回0 if(i
21、L.length) returni+1; /若找到值为x的兀素,返回兀素的序号 i+; while(iL.length)&(L.datai!=x) /在顺序表中查找值为 x 的结点 inti=0; intLocateSeqlist(SeqListL,DataTypex) 元素,考察元素的值是否等于x,描述算法如下: 序号的最小值,当找不到值为x的结点时,返回结果0。下列算法从左往右扫描顺序表中的 定位运算LocateSeqlist(SeqListL,DataTypex)的功能是查找出线性表L中值等于x的结点 3、定位 L.length-; /表长度减1 L.dataj-1=L.dataj; /
22、依次左移 for(j=i;jL.length;j+) /第i个元素的下标为i-1 exit(“非法位置”); if(iL.length) /检查位置是否合法 /删除线性表L中的第i个数据结点 voidDeleteSeqList(SeqListL,inti)18 1、结点结构 一、单链表的类型定义 链表和双向循环链表,其中最简单的是单链表。 线性表的链接存储是指它的存储结构是链式的。线性表常见的链式存储结构有单链表、循环 第三节 线性表的链接存储 到最低。 平均时间复杂度为O(n)。求表长和读表元素算法的时间复杂度为O(1),就阶数而言,己达 (3)对于定位算法,需要扫描顺序表中的元素。以参数x
23、与表中结点值的比较为标准操作, O(n),元素平均移动次数约为(n-1)/2,时间复杂度为O(n)。 (2)删除算法DeleteSeqlist,可得其在最坏情况下元素移动次数为n-1,时间复杂度为 比较和移动的次数为n-i+1次,插入算法的平均移动次数约为n/2,其时间复杂度是O(n)。 还与插入的位置i有关。插入算法在最坏情况下,其时间复杂度为O(n)。一般情况下元素 (1)设表的长度length=n,在插入算法中,元素的移动次数不仅与顺序表的长度n有关, 在分析线性表的顺序表实现算法时,一个重要指标就是数据元素的比较和移动的次数。 三、顺序表实现算法的分析 顺序表的求表长操作,直接输出L.
24、length即可。 19 structnode*next; /指针域 DataTypedata; /数据域 typedefstructnode 3、单链表的类型定义如下: 如果head等于NULL,则表示该链表无任何结点,是空单链表。 空指针,它不指向任何结点,表示链表结束。 (3)链表中最后一个数据元素结点称为尾结点或终端结点。尾结点指针域的值NULL称为 (2)链表中第一个数据元素结点称为链表的首结点。 针变量来命名单链表。 (1)head称为头指针变量,该变量的值是指向单链表的第一个结点的指针。可以用头指 所有结点通过指针链接形成链表。 2、单链表 直接后继结点。 (2)next部分称为
25、指针域或链域,用于存放一个指针,该指针指向本结点所含数据元素的 (1)data部分称为数据域,用于存储线性表的一个数据元素。 20 LinkList head; /头指针 /建立一个空的单链表 LinkList InitiateLinkList() 空表由一个头指针和一个头结点组成。算法描述如下: 1、初始化 二、线性表的基本运算在单链表上的实现 和尾结点。 点,称之为头结点,其他结点称为表结点。表结点的第一个和最后一个结点分别就是首结点 在本书的讨论中,为了便于运算的实现,在单链表的第一个结点之前增设一个类型相同的结 4、带头结点的单链表 Node,*LinkList; 21 线性表的定位运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自学考试 数据结构 导论 课件
限制150内