全国计算机等级考试解析例题精解与应试模拟三级数据.pdf
《全国计算机等级考试解析例题精解与应试模拟三级数据.pdf》由会员分享,可在线阅读,更多相关《全国计算机等级考试解析例题精解与应试模拟三级数据.pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章数据结构与算法本章大纲要求:(1)基本概念(2)线性表(3)多维数组、稀疏矩阵和广义表(4)树形结构(5)查找(6)排序重要考点提示:根据对历年真题的分析可知,本章考核内容约占1 5%,主要包括以下几个方面:(1)数据结构和算法的基本概念(2)数据的逻辑结构、存储结构(3)顺序表和一维数组(4)链表、栈、队列、串的概念与操作(5)稀疏矩阵的存储、广义表的定义与存储(6)二叉树的定义、存储与表示、线索二叉树(7)树与二叉树的转换、二叉树的周游算法(8)霍夫曼算法及其应用(9)静态表、动态表的查找(1 0)各种排序算法,插入排序、选择排序、交换排序、归并排序2.1基 本 概 念考点1:数据结
2、构的基本概念*(1)数据数据就是采用计算机能够识别、存储和处理的方式,对现实世界的事物进行的描述,简而言之,数据就是计算机化的信息。数据元素是数据的基本单位。一个数据元素可由一个或多个数据项组成,数据项是有独立含义的数据最小单位。(2)数据结构数据结构一般包括3 个方面的内容:数据之间的逻辑关系、数据在计算机中的存储方式以及在这些数据上定义的运算的集合。a.数据的逻辑结构是数据间关系的描述,它只抽象地反映数据元素间的逻辑关系,而不管其在计算机中的存储方式。数据的逻辑结构分为线性结构和非线性结构。b.数据的存储结构是逻辑结构在计算机存储器里的实现。c.数据的运算定义在数据的逻辑结构上,而实现是在
3、存储结构上。主要的运算包括插入、删除、排序、查找等。考点2:主要的数据存储方式*实现数据的逻辑结构到计算机存储器的映像有多种不同的方式。最主要的存储方式有顺序存储储结构和链式存储方式。(1)顺序存储结构顺序存储结构是将逻辑上相邻的数据元素存储在物理上相邻的存储单元中,结点之间的关系由存储单元的邻接关系来体现,其主要特点是:a.结构中只有自身信息域,没有链接信息域,因此,存储密度大,存储空间利用率高;b.可以通过计算直接确定数据结构中第i 个结构的存储地址;c.插入、删除运算会引起大量结构的移动。(2)链式存储结构链式存储结构是在每个结点中至少包括一个指针域,用指针来体现数据元素之间逻辑上的联系
4、。其主要特点是:a.存储密度小,存储空间利用率低;b.逻辑上相邻的结点物理上不必邻接,可用于线性表、树、图等多种逻辑结构的存储表示;c.插入、删除操作灵活方便,不必移动结点。考点3:算法的设计与分析算法的设计采用由粗到细、由抽象到具体的逐步求精的方法。算法分析主要是分析算法所要占用的计算机资源,即时间代价和空间代价两个方面。a.时间代价是当问题的规模以某种单位由1增至n 时解决该问题的算法运行时所耗费的时间,也以某种单位由f(l)增至f(n),则称该算法的时间代价为f(n)b.空间代价是当问题的规模由1 增 至 n 时,解决该问题的算法实现时所占用的空间也以某种单位由g(l)增至g(n),则称
5、该算法的空间代价为g(n)o2.2线性表考点4:顺序表和一维数组线性表的逻辑结构是个数据元素的有限序列(切,2”.,东)。按存储方式不同线性表可以分为:顺序存储的顺序表、链式存储的链表、散列存储的散列。顺序表是用一组地址连续的存储单元依次存储数据元素的线性表,其逻辑相邻的数据元素具有相邻的物理(存储)位置。对数据元素进行插入、删除操作时需要移动数据元素,存储空间被分配后难以再被扩充。各种高级语言中的一维数组就是用顺序方式存储的线性表,因此也常用一维数组来称呼顺序表。考点5:链表*链表的特点是可以用一组任意的存储单元来存储线性表的各个数据元素,不要求逻辑上相邻的元素物理上也相邻。链表的优点是插入
6、、删除等操作不需要移动元素,只需要修改指针,比较灵活,缺点是不能随机存取。链表可以分为线性链表和双向链表两种,前者也称为单链表,每个结点中只有一个指向后一个结点的指针;后者每个结点有两个指针,一个指向直接前驱结点,一个指向直接后继结点。考点6:栈与队列安栈与队列都是对操作位置加以限制的线性表。可以使用顺序存储也可以采用链式存储。栈的插入和删除只能发生在线性表的一端,允许插入、删除的这一端称为栈顶,另一个固定端称为栈底。当表中没有元素时称为空栈。栈是按“后进先出”的规则进行操作的。栈的常用运算主要包括入栈(p u s h)、出 栈(p o p)和取栈顶元素(t o p)。栈是使用最为广泛的数据结
7、构之一,表达式求值、递归过程实现都是栈应用的典型例子。队列的插入只能在线性表的一端进行,而删除在线性表的另一端进行,允许插入的一端叫队尾(r e a r),允许删除的一端叫队头(f r o n t)。队列是按“先进先出”的规则进行操作的。队列常用的运算有入队(e n q)、出 队(d e q)和取队首元素(f r o n t),队列在计算机中应用也十分广泛,硬件设备中的各种排队器、缓冲区的循环使用技术、操作系统中的作业队列等都是队列应用的例子。考点7:串串(或字符串)是由零个或多个字符组成的有限序列,零个字符的串是空串。串的存储方式有:顺序存储和链式存储。顺序存储时可以采用非紧缩方式,也可以采
8、用紧缩方式。串的基本运算有连接、赚值、求长度、全等比较、求子串、求子串位置以及替换等。其中找子串位置(也称模式匹配)是非常重要的一种运算。2.3多维数组、稀疏矩阵和广义表考点8:多维数组的线性存储*多维数组是一维数组的推广,其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型。多维数组中最常用的是二维数组。多维数组的存储方式一般是多维数组中的元素放在一个线性序列中,排列方式可以是行优先顺序或列优先顺序。二维数组第i 行、第 j 列元素a”存储地址的计算公式为:行优先顺序:L O C (aij)=L 0 C (an)+(i-1)*n+(j-1)列优先顺序:L O C (au)=L
9、 0 C (aH)+(j-1)*m+(i-D)*九式中m 和 n分别为数组中每列和每行的元素个数,入为每个数组元素占用的存储单元个数。考点9:稀疏矩阵的存储具有大量0元素的矩阵称为稀疏矩阵。对稀疏矩阵进行压缩存储,即只存储非0元素。对非0元素的分布有规律的矩阵,如下三角矩阵,按行优先顺序存储,非零元素的存储地址用下式计算:L O C (a“)=L 0 C (an)+(i*(i-1)/2+(j-1)对一般的稀疏矩阵,可以采用三元组方法或十字链表方法存储。前者是按行优先顺序存储非零元素所在的行、列以及它的值构成的三元组,后者则采用十字链表。考点10:广义表的定义和存储广义表是线性表的推广,也称为列
10、表,是由零个或多个单元素或子表所组成的有限序列。广义表与线性表的区别在于:线性表的成分都是结构上不可分的单元素,而广义表的成分既可以是单元素,又可以是有结构的表。广义表的特征:广义表的元素可以是子表,而子表的元素还可以是子表。广义表可被其他广义表所共享。广义表可以是递归的表,即广义表也可以是本身的一个子表。2.4树形结构考点11:树及二叉树的定义及表示*树是一个或多个结点组成的有限集合T,有一个特定的结点称为根,其余结点分为m(m 2 O)个不相交的集合T l,T 2,,T m。每个集合又是一棵树,被称为这个根的子树。这是树的递归定义。树的性质有以下4条:(1)树中的结点数等于所有结点的度数加
11、1。(2)度为k 的树中第i层上至多有k-个结点(泛1)。(3)深度为h 的 k 叉树至多有(kh-l)/(k-l)个结点。(4)具有n个结点的k 叉树的最小深度为 lo gk(n(k-l)+l)l二叉树是树形结构的一个重要类型。二叉树是结点的有限集合,这个有限集合或者为空集,或者由一个根结点及两棵不相交的分别称做这个根的左子树和右子树的二叉树组成。二叉树不是树的特殊情况,树与二叉树之间最主要的区别是:二叉树的子树有左右之分,其次序不能颠倒,即使是在只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。在一棵二叉树中,如果最多只有最下面两层结点度数可以小于2,并且最下面一层结点都集中在最左
12、边的位置上,这样的一棵二叉树称为完全二叉树。树与二叉树可以互相转化,树(树林)转换为二叉树的算法:在一棵树中,凡是兄弟结点就用线连起来,然后去掉父结点到子结点的连线,只保留父结点到第一个子结点的连线。如果把森林中第二棵树的根结点看成是第一棵树的根结点的兄弟结点,则同样可以导出森林与二叉树的对应关系。把二叉树转换为树的算法:若某结点是其双亲的左孩子,则把该结点的右孩子,右孩子的右孩子,都与该结点双亲用线连起来,最后去掉所有的双亲到右孩子的连线。考点12:二叉树与树的周游*遍历一个树形结构就是按一定的次序系统地访问树上的所有结点,使每个结点恰好被访问一次。由二叉树的定义可知,一棵二叉树由3部分组成
13、:根、左子树和右子树。因此对二叉树的遍历也可相应地分为3 类 先 序(根)遍 历、中序(对称序)遍历、后 序(根)遍 历。先序遍历:访问根结点;先序遍历左子树;先序遍历右子树。中序(对称序)遍历:中序遍历左子树;访问根结点;中序遍历右子树。后序遍历:后序遍历左子树;后序遍历右子树;访问根结点。由于树也是一种层次结构,所以对树有时也进行按层遍历,所谓按层遍历,就是从树根结点开始,依次访问每一层,对同一层结点,由左至右进行访问。树和森林的遍历也主要有三种:先根次序、后根次序和层次次序。其中,前两种是按深度优先方式进行的,后一种是按广度优先方式进行的。根据树和二叉树的对应关系,可以看出,按先序遍历树
14、正好等同于按先序遍历对应的二叉树;按后序遍历树正好等同于按对称序法遍历对应的二叉树。考点13:二叉树的存储与线索二叉树(1)二叉树的L l i n k-r l i n k法存储二叉树通常的存储方式是链式存储,每个链结点除了数据域外,还可以增加两个指针域l l i n k和r l i n k,分别指向左右两个子结点。当某个结点的子结点不存在时,相应的指针值为空(n i l)。(2)线索二叉树一个具有n个结点的二叉树若采用二叉链表存储结构,在2 n个指针域中只有n-1个指针域是用来存储结点孩子的地址的,而另外n+1个指针域存放的都是n i l。为了保留结点在某种遍历序列中直接前驱和直接后继的位置信
15、息,可以利用二叉树的二叉链表存储结构中的这n+1个空指针域来记录这些信息。这些指向直接前驱结点和指向直接后继结点的指针被称为线索(t h r e a d),加了线索的二叉树称为线索二叉树。(3)完全二叉树的顺序存储二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。一般是按照二叉树结点从上至下、从左到右的顺序存储。完全二叉树或者满二叉树比较适合于顺序存储。考点14:霍夫曼算法及其应用*霍 夫 曼(H u f f m a n)树,也称为最优二叉树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。设二叉树具有n个带权值的叶结点,那么从根结点到各 个叶结点的路径长度与
16、相应结点权值的乘积之和叫做二叉树的带权路径长度,记为:W P L =WkLkk=l其中Wk为第k个叶结点的权值,L k为第k个叶结点的路径长度。最优二义树算法为:对于n个权为w2,w3,w”的结点,首选找出两个最小的叱值,不妨设为W和W2,然后对m-1个权W 1 +W2,W 3,来解这个问题,并且将解中的代替,如此进行下去,直到所有的W构成一棵二叉树。给定一组权值,构造出来的霍夫曼树不是唯一的。在霍夫曼树中,权值大的结点离根最近。另外,在霍夫曼树中,没有度为1的结点。2.5查找考点15:线性表的查找查找是确定一个元素在表或树中的位置,衡量一个查找算法的标准是对关键码平均比较的次数,或称为平均检
17、索长度A S L。对于线性表的查找主耍分下面几种:(1)顺序查找顺序查找是线性表的最简单的查找方法,其具体步骤是:用待查关键码从头开始逐个与表中元素比较,直到找出相等的元素,则查找成功;或者找遍所有元素,则查找失败。顺序查找的优点:对线性表的结点的逻辑次序无要求,对线性表的存储结构无要求。顺序查找的缺点:平均检索长度长,与表中结点个数n成正比,若检索关键码的概率相等,则查找成功时平均比较次数为(n+l)/2。查找不成功时;关键码的比较次数总是n+1 次。(2)二分查找二分查找法是一种效率较高的线性表查找方法,要求线性表结点必须是按关键码值排好序的,且线性表以顺序方式存储。其具体步骤是:首选用要
18、查找的关键码值与线性表中间位置结点的关键码值相比较,这个中间结点把线性表分成两个子表,比较相等则查找完成,不等则根据比较结果确定下一步的查找应该在哪一个子表中进行,如此进行下去,直到找到满足要求的点。二分查找的优点:平均查找长度小,为 l og?!二分查找的缺点:线性表排序需要花费时间,顺序方式存储的插入、删除不便。(3)分块查找分块查找要求把线性表分成若干块,每一块中的结点不必有序,但块与块之间必须有序,还要求将各块中的最大关键码值组成一个有序的索引表。其具体步骤是:首选在索引表中用顺序查找或二分查找法确定所求记录所在的块,然后再从该块中用顺序查找方法找出所求的记录。(4)散列表查找散列法的
19、基本思想是:由结点的关键码决定结点的存储地址,即以关键码k 为自变量,通过散列函数计算出对应的函数值h(k),将这个值解释为结点的存储地址。检索时再根据要检索的关键码值用同样的方法计算出结点位置。散列法需要解决以下两个问题:a.构造好的散列函数,能够将一组关键码值尽可能均匀地安排在事先确定的范围里,并且使得发生碰撞的可能性最小 常见的散列函数有直接定址法除余法、数字分析法、折叠法、平方取中法等。b.制定解决碰撞的方案。处理碰撞的方法主要有拉链法和开放定址法。影响产生冲突多少有以下三个因素:哈希函数是否均匀;处理冲突的方法;哈希表的负载因子。散列表的负载因子公式:散列表中结点的数目C C -基本
20、区域能容纳的结谶负载因子的大小体现散列表的装满程度,e越大,则散列表装得越满,发生碰撞的机会越大,一般取a 1 o考点16:树形结构与查找*(1)二叉排序树二叉排序树是一类特殊的二叉树,其特点是:若左子树不空,则左子树上所有结点的值均小于根结点的值;若右子树不空,则右子树上所有结点的值均大于根结点的值;所有的子树也遵守相同的规则。对二叉排序树中序遍历(周游)可以得到关键字从小到大的有序序列。对无序序列可以通过构造一棵二叉排序树而变成一个有序序列,构造二叉排序树的过程就是对无序序列进行排序的过程。对二叉排序树的操作主要的插入和删除操作。平衡二叉树是对二叉排序树的一种“平衡化”处理。结点的平衡因子
21、定义为其右子树高度减去左子树高度。若任一结点的平衡因子均取一1,0或+1,则此二叉排序树为平衡的二叉排序树(A V L树)。平衡二叉排序树的查找方法与一般的二叉排序树完全一样,优点是总能保持检索长度为O Q o g z n)量级。往平衡二叉树插入新结点时,需要对树的结构进行必要调整,以动态地保持平衡二叉树的特点。(2)B树和B+树B树和B+树是一种平衡的多路查找树形结构,用于组织外存储器中文件的动态索引结构。这样可以使得每个结点包含多个关键码值,有多个孩子,使得树的层次降低,查找时访问外存的次数减少。由B树定义可以知:a.m阶B树每一个结点最多有m个子树。b.m阶B树根结点或为叶结点,或至少有
22、两棵子树;中间结点至少有m/2 棵子树。c.m阶B树任一结点的左右子树的高度都相等。B树的主要操作是:查找、插入、删除。在m阶B树上插入关健码的过程为:a.B树是从空树开始,逐个插入关键码而生成的。b.在B树中,每个非叶结点的关键码个数都在 m/2 1 T,m-1 之间。c.B树中关键码的插入不是在叶结点上进行的,而是在最底层的某个非终端结点中添加一个关键码。若插入结点上关键码个数不超过mT个,则可直接插入到该结点上;否则,要进行调整,即结 点 的“分裂”。根据B+树的定义可知:a.有n棵子树的结点中含有n个关键码。b.所有关键码均出现在叶结点中,上层关键码均是下层相应结点中最大关键码的重复,
23、且叶子结点所有关键码是有序的。c.对B+树进行两种查找运算:一种是从最小关键码起顺序查找,另一种是从根结点开始,进行随机查找。2.6排序考点17:插入排序插入排序的基本思想是每次将一个待排序记录按其关键码值大小插入到前面已排序的文件中的合适位置上,直到记录插入完为止。a.直接插入排序:在已排好序的序列中查找插入位置时用顺序法查找,找到插入位置后将该位置原来的记录及其后面所有的记录顺序后移一个位置,空出该位置来插入记录。b.二分法插入排序:在已排好的序列中找插入的位置时,用二分法查找,找到插入位置后和直接插入排序法同样处理。c.s he l l排序:又称缩小增量法,是按增量将文件分组。首先取增量
24、d i n,把全部记录分成出个组,所有距离为出倍数的记录放在一组中,各组内用插入法排序,然后取d 2 d i,重复上述分组和排序工作,直至取d=l,即所有记录放在一个组中为止。考点18:选择排序*选择排序的基本思想是每次从待排序的记录中选出关键码值最小(或最大)的记录,顺序放在已排记录序列的最后,直到全部排完,这里主要讲堆排序堆排序是对一组待排序的关键码,首先把它们按堆的定义排成一个序列(称为建堆),这就找到了最小的关键码,然后将最小的关键码取出,用剩下的关键码再建堆,便得到次最小的关键码,如此反复进行,直至将全部关键码排好序为止。堆排序的两个主要问题:(1)如何将n个元素的序列按关键码建成堆
25、。(2)输出堆顶元素后,如何调整剩余元素使之成为一个新堆。考点19:交换排序*交换排序主要是起泡排序和快速排序。a.起泡排序是将排序的记录顺次两两比较,若为逆序则进行交换,将序列照此方法从头到尾处理一遍称做一趟起泡。第二趟起泡再将次最大关键码交换到倒数第二个位置,即它的最终位置,如此进行下去,若某一趟起泡过程中没有发生任何交换,或排序已经进行了 n-1趟,则排序过程结束。b.快速排序是在待排序序列中任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键码值比它小的一个部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。考点20:归并排序归并排序的基本思
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 解析 例题 应试 模拟 三级 数据
限制150内