知识点大纲全国计算机等级考试数据结构和算法

知识点大纲全国计算机等级考试数据结构和算法
知识点大纲全国计算机等级考试数据结构和算法

全国计算机等级考试二级office

二级公共基础知识部分(10分*10题)

第一章. 算法与数据结构

考点1:算法概念

● 算法

算法:指解题方案准确而完整的描述。

算法不等于程序,也不是计算方法。程序编制通常不优于算法设计。

考点2:算法的四个基本特征

可行性、确定性(算法步骤有明确定义)、有穷性、拥有足够情报

考点3:算法的时间复杂度和空间复杂度

1. 时间复杂度:执行算法所需的工作量。

算法执行的基本次数是问题规模的函数,固定规模下还与输入有关。

2. 空间复杂度:算法执行需要的存储空间(算法程序、输入初始数据、某种数据结构所需空间)

● 数据结构

(反映数据元素之间关系的数据元素集合,即带有结构的数据元素的集合,结构指数据元素之间

的前后件(前驱、后继)关系)。目的是提高数据处理的效率(速度/空间)

数据的逻辑结构:是反映数据元素之间逻辑关系的数据结构。

可以表示成:B=(D ,R )

B 表示数据结构;D 表示数据元素集合;R 表示数据元素之间的前后件关系

【例:一年四季的数据结构可以表示成B=(D ,R );D=(春,夏,秋,冬);B={(春,夏),

(夏,秋),(秋,冬)}】

数据结构的图形表示:

数据元素:用中间标有元素值的方框表示,称为结点。

逻辑关系:用有向线段从前件指向后件。没有前件的结点称为根结点;没有后件的结点称为

终端结点(叶子结点)

B=(D ,R ) D={di|1≤i ≤7}

={d1,d2,d3,d4,(d1,d3),(d1,d7),(d2,d4),(d3,d6),(d4,d5)}

考点4:数据的存储结构

数据的存储结构:指数据的逻辑结构在计算机

储存空间的存放形式。既储存数据元素的信息,还有元素的前后件关系信息。

数据的逻辑关系与数据的存储结构不一定相同。数据结构一般可以表示成多种存储结构,常

见的存储结构有顺序、链接、索引等。采用不同的存储结构,其数据处理效率不同。

考点5:线性结构和非线性结构(逻辑结构而言)

线性结构(线代表):

● 有且只有一个根结点,它无前件;

● 有且只有一个终端(叶子)结点,无后件;

● 除根结点和终端结点外,其他所有结点有且只有一个前件和一个后件。

线性表中结点个数n 称为线性表的长度;n=0表示空表。 常见的线性结构有线性表、栈、队列(循环队列)。

线性表是最简单、常见数据结构。可用顺序存储结构、链式存储结构。

顺序储存结构特点:线性表中所有元素存储空间连续,按逻辑顺序依次存放。

非线性结构:一个数据结构不是线性结构,称为非线性结构(树、图)。

空的数据结构可能是线性结构,也可能是非线性结构。

考点6:顺序表的插入运算

例:在第二个元素(18)之前插入一个元素87,过程如下:

1、29;

2、18;

3、56;

4、63 1、29;2、18;3、56;4、 ;

5、63 1、29;2、18;3、 ; 4、56;5、63 1、29;2、;3、18 ;4、56;5、63 1、29;2、87;3、18 ;4、56;5、63

【在平均情况下,插入运算在第i 个(1≤i ≤n )元素之前进行,需要移动一半的元素;最坏情况下需移动所有元素】

例:线性表的删除运算 删除线性表中的第一个元素(29),过程如下:

1、29;

2、18;

3、56 1、 ;2、18;3、56 1、18;2、 ;3、56 1、18;2、56

【在一般情况下,要删除第i 个(1≤i ≤n )元素时,在平均情况下,需要移动一半的元素。因此,在线性表顺序存储情况下,要删除一个数据,效率很低】

考点7:栈

栈:是限定在一端进行插入和删除或删除操作的一端称为栈顶,另一端称为栈底。原则是:栈具有记忆功能。

1. 栈底指针 bottom (指向最底部)

2. 栈顶指针 top (始终指向最顶部)

3. 栈空 即top=0(不能退栈,否则 下溢错误)

4. 入栈(元素苹果、桔子、西瓜、草莓依次入栈,top 指针上移)

5. 栈满 (top

6. 出栈(草莓、西瓜、桔子、苹果依次出栈进行退栈操作,top 考点8:队列

队列:允许在一端进行插入,另一端进行删除的线性表。1. 尾指针 rear :

插入一端称队尾,rear 指向队尾元素且始终指向最后入队元素。2. 排头指针 front : 出队一端称为排头(队头),用front 考点9:循环队列 rear=front=m (队头、队尾指针同时指向同一个元素)。 入队运算:初始状态下,F 和R 都指向1,随着ABC 元素的入队,R F 不变。当R 指向最后一个元素C 之后,R 最终回到指向1出队运算:在初始状态下RF 都在1,一个元素退出,F 上移一格 R 如:当F 上移一格,第一个元素A 就会退出,被赋值给其它元素如

队头指针F 继续上移一格,B 退出赋值给b ,以此类推。

队尾指针始终不变指向1,rear 指向位置才是队尾。

此时,队尾可以继续进行入队操作,元素E 、F 可以继续入队

直到队满。此时,Rear 和Front 同时指向时队满。

即rear=front=m 。因此,仅凭rear=front=m ,不能确定对空或者队满。

因此,我们定义标记S 。S=0 表示队列空;S=1 表示队列非空(不一定是满)

因此,我们可以得到:队列为空条件为s=0,rear=front ;队列满条件为s=1,rear=front 。

队列满,不能进行入队操作,否则“上溢”;队列空不能进行退队操作,否则“下溢”。

考点10:线性链表

● 线性链表是线性表的链式存储结构。

● 线性链表中每一个存储结点分为两部分:

● 例:在线性链表的结点X 之前插入一个新元素b,1) 取得一个结点,设该结点号为p ,其数据域为2) 使结点p 指向包含X 的结点。即结点p 的指针域为原结点q 的指针域(X

3)使结点p 指针域改为p ,即指向元素b,顺序表和链表的优缺点比较

● 树(tree ):非线性结构,具有明显的层次结构

● 父结点:在树结构中,每一个结点只有一个前件,这个前件称为父结点。

● 根结点(F ):没有前件的结点称为根节点,一个树只有一个。

● 子节点:在树结构中,每一个结点可以有多个后件,这些后件都称为子节点。

● 叶子结点:没有后件的结点,称为叶子结点。

● 结点的度:一个结点拥有的后件个数称该结点的度。(叶子结点度为0)F 度为3 ● 树的度:在树结构中,所有结点中最大的度称为树的度。结点F 3

● 树的深度:树的最大层次称为树的深度。 4 (树)

● 子树:以某结点的一个子结点为根构成的树称为该结点的子树(图框内是以C 为根结点的子树)。

? 树的存储结构:树在计算机中用多重链表示。多重链表中的每个结点描述了树中对应结点的信息,

件进行依次说明,这是对于树当中每个结点必须存在的存储形式。

? 二叉树特点:

非空二叉树只有一个根结点;每一个结点最多有两颗子树,且

分别称为该结点的左子树和右子树。

在二叉树中,每一个结点的度最大为2,所有子树均为二叉树。

考点11-13:二叉树的性质1、2、3

性质1:二叉树的第i 层上至多有2i-1(i ≥1)个结点。

性质2:深度为h 的二叉树中至多含有2h -1个结点。

性质3:在任意二叉树中,度为0结点(叶子结点)比度为2

结点多一个。 例:某二叉树中度为2的结点有18个,则叶子结点有 个。(19)。如上图所示,二叉树第4层有

24-1=8个结点(性质1);深度为4的该二叉树最多有24-1=15个结点(性质2)。

完全二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。 如下图,如果把10移到右侧也不算完全二叉树,必须保持左侧相对完整。

满二叉树:出最后一层叶子结点外,每一层上所有结点都有两个子结点。在满二

叉树中,每一层的结点数都达到最大值。

二叉树通常采用链式存储结构,每个存储结点由两部分组成:数据域和指针域。其中指针域有两个:左指针域和右指针域。BT 指针称为二叉链表的头指针,用于指向根结点。

二叉树存储结点结构:Lchild Value Rchild

i

指向左子结点的指针域 数据域 指向左子结点的指针域

考点14:二叉树的遍历

二叉树的遍历:不重复的访问二叉树中的所有结点。 【总原则:先左后右】

● 前序遍历(DLR ):根-左-右 以右图为例,访问顺序为:FCADBEGHP

● 中序遍历(LDR ):左-根-右 以右图为例,遍历顺序为:ACBDFEHGP

● 后序遍历(LRD ):左

-右-根 以右图为例,遍历顺序为:ABDCHPGEF

(注:所谓的前中后遍历是根据访问根的顺序决定的;遍历左右子树时,仍采用以上原则)

宝宝定理:对于完全二叉树而言

? 如果它的结点个数为偶数n ,则该二叉树中:

叶子结点个数

=非叶子结点个数=n/2

? 如果它的结点个数为奇数m ,则该二叉树中:

叶子结点个数=非叶子结点个数+1=(m+1)/2(即叶子结点个数比非叶子结点个数多一个)

查找技术:根据给定值,在查找表中确定一个其关键字等于给定值的数据元素。

● 查找结果:1.查找成功:找到;2.查找不成功:没找到

● 平均查找长度:查找过程中关键字和给定值进行比较的平均次数。

考点15:顺序查找

?顺序查找的基本思想:

从表中的第一个元素开始,将给定值与表中逐个元素的关键字进行比较,直到两者相符,查到所需元素为止。否则就是查找不成功,表中无要找元素。

?平均要与表中一半以上元素进行比较,最坏情况下需要比较全部元素n次。

?以下两种情况下只能采用顺序查找:

1.如果线性表是无序表,则只能采用顺序查找。

2.即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。

考点16:二分法查找

?思想:先确定待查找记录所在范围,然后逐步缩小范围,直到找到或确认找不到该记录为止。

?前提:必须在具有顺序存储结构的有序表中进行。

?特点:比顺序查找方法效率更高。最坏情况下,需要比较log2 n次。n指线性表长度

二分法举例:在下图长度为11的线性表中查找22过程

1 2 3 4 5 6 7 8 9 10 11

如上图所示:在上述顺序存储结构的有序表中,low指针指向最小元素7,high指针指向最大元素94,mid指针指向中间元素56。用中间元素56跟目标元素22比可知22一定在56左侧。(a)如此,我们把high指针移到56左侧的最大位置40,low指针不动,mid指针重新设定为小数据表的中间位置,即元素18所在位置,再用18与22进行比较可知22在18右侧。(b)如此,我们将low指针移到18右侧的最小结点22处,high指针不动。此时Mid指针指向中间偏左位置指向22,在进行比较,找到。

●交换类排序法:指借助数据元素的交换来进行排序的一种方法,主包括冒泡排序法和快速排序法。?冒泡排序法:最简单的一种交换类排序方法,在数据元素的序列中,对于某个元素,如果其后存在一个元素小于它,则称之为存在一个逆序。冒泡排序的基本思想,就是通过两两相邻数据元素之间的比较和交换,不断的消除逆序,直到所有数据元素有序为止。

举例来说:对(4,1,6,5,2,3)这样一个6个元素组成的线性表排序。

第一遍从前往后扫描,首先比较4和1,前元素大于后元素,这是一个逆序,两者交换。交换后,接下来是4和6比较,不交换。6和5比较,交换。6和2比较,交换。6和3比较,交换。最大元素6到达尾部,第一遍从前往后扫描的最后结果为(1,4,5,2,3,6)。

第一遍从后往前扫描,由于数据元素6已经排好序,因此排序范围为(1,4,5,2,3),先比较3和2,不交换。比较2和5,交换。比较2和4,交换。比较2和1,不交换。此时排序范围内,(1,4,5,2,3)的最小元素1到达表头,达到了他在有序表中的应有位置。第一遍从后往前扫描的最后结果为(1,2,4,5,3,6)。第二遍的排序方法同上,不再赘述。

?快速排序法:是冒泡排序法的一种改进,其基本思路如下:在线性表中逐个选取元素对表进行分割,直到所有元素全部选取完毕,此时线性表即排序结束。

快速排序的具体做法:设置两个指针,low和high,它们的初值分别指向线性表的第一个元素 k元素和最后一个元素,首先从high所指向的位置向前扫描,找到第一个小于k元素的元素,并与k元素互相交换,然后从low所指位置向后扫描,找到第一个大于k元素的数据元素,并与k元素交换,重复这两个步骤,直到low等于high为止,此时线性表排好序。

●插入排序法:将无序序列中的各元素依次插入到有序的线性表中。包括简单插入排序法和希尔排

序法。

?简单插入排序法:是把n个待排序的元素看成一个有序表和一个无序表,开始时有序表只包含一个元素,而无序表包含剩余的n-1个元素,每次取无序表中第一个元素插入到有序表中的正确位置,使之成为增加了一个元素的新的有序表,插入元素时插入位置及其后的记录依次向后移动,最后当有序表的长度为n,无序表为空时排序完成。此排序方法的效率与冒泡排序法相同。

?希尔排序法:希尔排序也是一种插入类排序,但希尔排序比简单插入排序更有效率。希尔排序的基本思想是:将整个无序序列分割成若干个小的子序列,并分别进行插入排序。其分割方法如下:将相隔某个增量h的元素构成一个子序列,在排序过程中逐次减少这个增量,直到h减到1,进行一次插入排序,排序即可完成。希尔排序的效率与选取的增量序列有关。

●选择类排序法:

?简单选择排序法:从所有n个待排序的数据元素中选取最小的元素,将该元素与第一个元素交换,再从剩下的n-1个元素中,选取出最小的元素与第2个元素交换,重复操作,直到所有元素有序。?堆排序法:属于选择类排序法。所谓堆,即若有n个元素的序列,将元素按顺序组成一棵完全二叉树,所有结点的值大于或等于左右子结点的值,我们称之为大根堆;当所有结点的值小于或等于左右子节点的值时,称为小根堆。排序方法如下(以大根堆为例):首先将一个无序序列建成堆。然后将根结点与其左右子树的根结点进行比较,将左右子树中>根结点元素与根结点交换。

其次再分别比较交换后的左右子树根结点值与其底下左右子树的值。如此通过不断的比较,大值上移交换完成排序。

{其他补充知识:1.算法的两个基本要素:对数据对象的运算(算术运算、逻辑运算、关系运算、数据传输;加减乘除、与或非、><=、输入输出)和操作、算法的控制结构(顺序、选择、循环结构);

2.算法设计的基本方法:列举法、归纳法、递推法、递归法、减半递推技术和回溯法等。

3.带链的栈:栈也是线性表,可以采用链式存储结构。栈具有记忆功能。

4.带链的队列:队列也是线性表,也可以采用链式存储结构。}

——后续内容持续更新中哦。。。。。。

相关主题
相关文档
最新文档