计算机公共基础复习.docx
《计算机公共基础复习.docx》由会员分享,可在线阅读,更多相关《计算机公共基础复习.docx(64页珍藏版)》请在冰豆网上搜索。
计算机公共基础复习
〖第二部分〗二级公共基础
历年试题分布:
数据结构与算法(3-5个选择题,一般4题;1-3个填空题,一般2题,约12分)
程序设计基础(1-2个选择题,一般1题;0-2个填空题,一般0-1个,约4分)
软件工程基础(2-3个选择题,一般2题;1-2个填空题,一般2个,约8分)
数据库设计基础(2-3个选择题,一般2题;1-2个填空题,一般2个,约8分)
第一章数据结构与算法
第一部分算法
大纲要求:
算法的基本概念;算法复杂度的概念和意义(时间与空间复杂度)
一、算法的基本概念
算法:
是指一组有穷的指令集,是解题方案的准确而完整的描述。
通俗的说,算法就是计算机解题的过程。
二、算法的基本特征(★)
1、可行性:
能够得到满意的结果。
2、确定性:
算法的每一个步骤都必须有明确的定义。
3、有穷性:
一个算法必须在执行有穷步后结束,即算法必须能够终止。
即必须能在有限的时间内做完。
4、有零个或多个输入,有一个或多个输出。
三、算法的基本运算和操作
算法的基本运算和操作包括:
算术运算、逻辑运算、关系运算和数据传输。
四、算法的3种基本控制结构
算法的3中基本控制结构是:
顺序结构、选择结构和循环结构。
五、算法设计基本方法
1、列举法2、归纳法3、递推法4、递归法5、减半递推技术6、回溯法
六、算法复杂度(时间复杂度和空间复杂度)(★★)
1、时间复杂度:
执行算法所需要的计算工作量,也就是耗费的时间量。
是对算法时间效率的度量。
2、空间复杂度:
执行这个算法所需要的内存空间,是对算法所需存储空间的度量。
3、时间复杂度与空间复杂度是从两个方面对算法的效率进行度量,两者之间没有必然的联系。
例:
例:
1.算法的有穷性是指()【08年4月】
A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的
C)算法程序的长度是有限的D)算法只能被有限的用户使用
2.算法的空间复杂度是指()。
【09年9月】
A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量
C.算法程序中的语句或指令条数 D.算法在执行过程中所需要的临时工作单元数
3.算法复杂度主要包括时间和【05年9月】复杂度。
4.下列叙述中正确的是()【06年9月】
A)一个算法的空间复杂度大,则其时间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度必定小
C)一个算法的时间复杂度大,则其空间复杂必定小
D)上述三种说法都不对
第二部分数据结构
大纲要求:
数据结构的定义,数据的逻辑结构与存储结构,数据结构的图形表示;线性结构与非线性结构的概念。
一、数据结构的相关概念
1、数据结构——是指由某一数据对象及该对象中所有数据成员之间的关系组成的集合。
通常也指带有结构的数据元素的集合。
数据结构可分为数据的逻辑结构和数据的存储结构两种。
2、数据的逻辑结构——反映数据元素之间逻辑关系的数据结构。
(★★★)
3、数据的存储结构——数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,即各数据元素在计算机中的存储关系。
(★★★)
4、数据存储结构不仅要存放各数据元素的信息,还要存放各数据元素之间的前后件关系的信息。
5、逻辑结构与存储结构之间的关系(★★★)
一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。
采用不同的存储结构,其数据处理的效率是不同的。
例:
1.下列描述中正确的是()【05年9月】
A)一个逻辑数据结构只能有一种存储结构
B)数据的逻辑结构属于线性结构,存储结构属于非线性结构
C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
2.下列叙述正确的是()【07年4月】
A)算法的效率只与问题的规模有关,而与数据的存储结构无关
B)算法的时间复杂度是指执行算法所需要的计算工作量
C)数据的逻辑结构与存储结构是一一对应的
D)算法的时间复杂度与空间复杂度一定相关
3.下列叙述中正确的是()【07年9月】。
A)数据的逻辑结构与存储结构必定是一一对应的
B)由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构
C)程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构
D)以上三种说法都不对
4.数据的存储结构是指()【05年4月】
A)存储在外存中的数据B)数据在外存中的数据
C)数据在计算机中的顺序存储方式D)数据的逻辑结构在计算机中的表示
6、数据结构的符号表示:
B=(D,R)B:
数据结构,D:
数据元素的集合,R:
数据元素之间的前后件关系。
7、数据结构的图形表示:
①方框:
表示数据元素②有向线段:
表示数据元素的前后件关系。
如:
一年四季的数据结构用图形表示为
8、根据数据结构各数据元素之间前后件关系的复杂程度,将数据结构分为:
(按逻辑结构的分类)(★★★)
①线性结构②非线性结构
9、线性结构所满足的条件:
①有且只有一个根结点;
②每一个结点最多有一个前件,也最多有一个后件;
线性结构又称为线性表,如:
线性表、栈、队列、循环对列、线性链表、循环链表等属线性结构。
(★★★)
10、非线性结构:
如果一个数据结构不是线性结构,则称之为非线性结构。
如:
树、二叉树等属非线性结构(★★★)
例:
1.下列叙述中正确的是()【06年4月】
A)线性链表是线性表的链式存储结构
B)栈与队列是非线性结构
C)双向链表是非线性结构
D)只有根结点的二叉树是线性结构
2.线性表的正确说法是()【05年4月】
A)存储空间不一定连续,前件和后件可以任意排列
B)存储空间不一定连续,前件必须排在后件的前面
C)存储空间一定连续,前件和后件可以任意排列
D)存储空间一定连续,前件必须排在后件的前面
11、空的数据结构既可以是线性结构,也可以是非线性结构,要根据该结构进行的运算而定。
二、线性表
大纲要求:
线性表的定义,线性表的顺序存储结构及其插入与删除运算
1、线性表是最简单、最常用的一种线性数据结构。
2、非空线性表有以下三个结构特征:
①有且只有一个根结点,它无前件;
②有且只有一个终端结点,它无后件;
③除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。
3、线性表中结点的个数n称为线性表的长度,当n=0时,称为空表。
4、线性表的顺序存储结构具有以下两个基本特点:
①线性表中所有元素所占的存储空间是连续的
②线性表中各数据元素在存储空间中是按逻辑顺序依次存放的
5、以顺序存储方式存储的线性表称为顺序表,顺序表的基本运算有:
①插入运算
要在第i(1<=i<=n)个元素之前插入一个新元素时,首先要从最后一个元素开始,直到第i个元素之间共n-i+1个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后将新元素插入到第i项。
②删除运算
在一般情况下,要删除第i(1<=i<=n)个元素,则原来第i个元素之后的所有元素都必须依次往前移动一个位置。
6、在平均情况下,要在线性表中插入或删除一个元素,需要移动表中一半的元素。
7、线性表的顺序存储结构适合小线性表或其中元素不常变动的线性表,对于元素经常需要变动的大线性表就不太合适,因为顺序存储的插入与删除的效率比较低。
(★)
例:
1.在长度为n的顺序存储的线性表中删除一个元素,最坏情况下需要移动表中的元素个数为()【12年3月】
三、线性单链表
大纲要求:
线性单链表、双向链表的结构及其基本运算
1、线性链表——线性表的链式存储结构称为线性链表。
2、在线性链表中,用一个专门的指针HEAD指向线性链表中第一个数据元素的结点,线性链表中最后一个元素没有后件,因此最后一个结点的指针域为空(用NULL或0表示),表示链表终止。
3、线性链表中的每一个元素,一方面要存储数据元素的值;另一方面要存储各数据元素之间的前后件关系。
即是将存储空间的每一个存储结点分为两部分:
一部分用于存储数据元素的值,称为数据域;另一部分用于存放下一个数据元素的存储序号,即指向后件结点,称为指针域。
3519
HEADABCDNULL
4、线性单链表的基本运算:
插入运算和删除运算
①插入运算:
首先给要插入的元素分配一个新结点,以便用于存储该元素的值,新结点可以从可利用栈中取得,然后将存放新元素值的结点链接到线性链表中指定的位置。
②删除运算:
首先要在线性链表中找到要删除的结点,然后将要删除结点放回到可利用栈。
注:
线性链表中插入和删除元素时,不需要移动数据元素,因此插入和删除的效率比较高。
(★)
四、双向链表
1、双向链表——对线性链表中的每个结点设置两个指针,一个称为左指针(Llink),用以指向其前件结点;另一个称为右指针(Rlink),用以指向其后件结点,这样的链表称为双向链表。
HEAD0ABCD0
注:
双向链表的突出特点是从某一结点出发能够找到它的前件。
(★)
五、循环链表
大纲要求:
循环链表的结构及其基本运算
1、循环链表与线性单链表相比,循环链表具有以下特点:
①循环链表中最后一个结点的指针域不是空,而是指向表头结点,即在循环链表中,所有结点的指针构成了一个环状链。
②在循环链表中增加了一个表头结点,在任何情况下,表中至少有一个结点存在,从而使空表与非空表的运算得到统一。
③在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点,而线性单链表就不行。
HEADABC
六、栈(它是一种特殊的线性表)
大纲要求:
栈的定义,栈的顺序存储结构及其基本运算。
1、栈——是限定在一端进行插入与删除的线性表。
在栈中,允许插入与删除的一端称为栈
顶(TOP),而不允许插入与删除的另一端称为栈底(BOTTOM)。
(★)
2、栈是按照“先进后出”或“后进先出”的原则来组织数据的。
(★)
3、栈具有记忆功能,因此可用于函数或过程调用。
(★)
7
6
5
top4D
3C
2B
bottom1A
(m表示栈的最大容量,top=0表示栈空,top=m表示栈满)
4、关于栈的进出和计算(★★)
例:
1.下列关于栈的描述正确的是()【05年9月】
A)在栈中只能插入元素而不能删除元素
B)在栈中只能删除元素不能插入元素
C)栈是特殊的线性表,只能在一端插入或删除元素
D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素
2.按照”后进先出”原则组织数据的数据结构是()【06年4月】
A)队列 B)栈 C)双向链表 D)二叉树
3.下列关于栈的叙述正确的是()【08年4月】
A)栈按“先进先出”组织数据B)栈按“先进后出”组织数据
C)只能在栈底插入数据D)不能删除数据
4.一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是【08年9月】
A)12345ABCDEB)EDCBA54321C)ABCDE12345D)54321EDCBA
5.支持子程序调用的数据结构是()【09年4月】
A)栈B)树C)队列D)二叉树
6.假设用一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有【09年4月】个元素。
4、栈的基本运算有三种:
入栈、退栈、读栈顶元素。
①入栈:
首先将栈顶指针进一(top加1),然后将新元素插入到栈顶指针指向的位置。
②退栈:
指取出栈顶元素并赋给一个指定的变量。
③读栈顶元素:
指将栈顶元素赋给一个指定的变量。
④“上溢”:
当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,若再进行入栈操作,此种情况称为栈“上溢”。
⑤“下溢”:
当栈顶指针为0时,说明栈空,不可能进行退栈操作,此种情况称为栈“下溢”。
七、带链的栈
带链的栈可以用于收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。
八、队列(是一种特殊的线性表)
大纲要求:
队列的定义,队列的顺序存储结构及其基本运算
1、队列——是指允许在一端进行插入、而在另一端进行删除的线性表。
(★)
2、允许插入的一端称为队尾,用尾指针(rear)指向队尾元素,rear总是指向最后被插入的元素;允许删除的一端称为队头,用队头指针(front)指向排头元素的前一个位置。
(★)
3、队列是按照“先进先出”或“后进后出”的原则来组织数据的。
(★)
1234567891011
ABCDEF
frontrear
4、队列的基本运算有:
入队运算和退队运算两种
①入队:
往队列的队尾插入一个元素称为入队运算。
②退队:
从队列的排头删除一个元素称为退队运算。
九、循环队列(★★)
1、循环队列:
将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,
供队列循环使用。
2、循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
3、从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,设队列的容量为n,f为当前队头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数总小于n,求队列中元素的个数的公式为:
(n+r-f)%n,如下图三,队列的容量n=7,队首所指的位置f=4,队尾所指的位置r=2,则队中元素个数为(7+2-4)%7=5。
Rear
mFG7
FrontEF6
DE5
CFront4
B3
FrontARearB2
1GD1
Rear
图一:
空队列图二:
队列满图三
4、循环队列的运算主要有:
入队运算和退队运算两种。
①入队:
每进行一次入队运算,队尾指针就进一,当队尾指针rear=m+1时,则置rear=1,然后将新元素插入到队尾指针指向的位置。
②退队:
每进行一次退队运算,排头指针就进一,当排头指针front=m+1时,则置front=1,然后将排头指针指向的元素赋给指定的变量。
例:
1.下列叙述中正确的是【12年3月】
A)循环队列是队列的一种顺序存储结构B)循环队列是队列的一种链式存储结构
C)循环队列的非线性结构D)循环队列是一种逻辑结构
注:
循环队列是一种顺序存储的线性结构。
2.下列叙述中正确的是【12年3月】
A)栈是一种先进先出的线性表B)队列是一种后进先出的线性表
C)栈与队列都是非线性结构D)以上三种说法都不对
3.下列叙述中正确的是【08年9月】
A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B)在循环队列中,只需要队头指针就能反应队列中元素的动态变化情况
C)在循环队列中,只需要队尾指针就能反应队列中元素的动态变化情况
D)循环队列中元素的个数是由队头和队尾指针共同决定
4.线性表的存储结构主要分为顺序存储结构和链式存储结构。
队列是一种特殊的线性表,循环队列是队列的【07年9月】存储结构。
5.设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有【08年4月】个元素。
6.设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有【2】个元素。
【10年3月】
7.设某循环队列的容量为30,如果头指针front=rear=30,经过一系列入队与退队运算后,front=16,rear=15,则该循环队列中共有【2】个元素。
【12年3月】
【小结】链式存储结构与顺序存储结构的区别:
①链式存储结构的存储空间可以不连续,而顺序存储结构要求存储空间必须是连续的;
②链式存储结构的各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,顺
序存储结构的存储顺序与数据元素的逻辑顺序是一致的;
③链式存储既可用于表示线性结构,也可以用于表示非线性结构;顺序存储用于表示
线性结构;
④链式存储适合大的线性表或插入和删除很频繁的线性表;顺序存储适合小的线性表
或其元素不常变动的线性表
⑤用链式存储便于插入和删除操作。
⑥链式存储不能随机存取元素,而顺序存储可以随机存取元素。
⑦顺序存储结构不便于对存储空间的动态分配;链式存储能很方便的实现存储空间的动态分配。
⑧顺序存储结构的存储空间不便于扩充。
⑨顺序存储结构的插入与删除运算的效率很低。
⑩只要可利用栈不空,链式存储结构不会发生“上溢”的情况。
十、树(非线性结构)
大纲要求:
树的基本概念,二叉树的定义及其存储结构,二叉树的前序、中序、后序遍历
1、树是一种简单的非线性结构。
2、父结点:
在树结构中,每一个结点只有一个前件。
如:
下图B是D和E的父结点
3、根结点:
没有前件的结点只有一个,称为树的根结点。
如:
下图A是根结点
4、子结点:
每一个结点可以有多个后件,它们称为该结点的子结点.如:
D和E是B的子结点
5、叶子结点:
没有后件的结点称为叶子结点。
如:
下图结点D、E、F是叶子结点(★)
6、度:
一个结点拥有的后件个数称为该结点的度。
如:
下图结点B的度为2,结点C的度为1(★)
7、树的度:
所有结点中最大的度称为树的度。
如:
下图中树的度为3(★)
8、树的深度:
树具有明显的层次结构,树的最大层次称为树的深度。
如:
下图中树的深度为3(★)
9、树在计算机中通常用多重链表表示。
十一、二叉树
大纲要求:
二叉树的定义
1、二叉树的两个特点(二叉树如下图)(★)
①非空二叉树只有一个根结点
②每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
注:
在二叉树中,每一个结点的度最大为2。
2、在二叉树的第K层上,最多有2K-1(K>=1)(★★★★)
3、深度为m的二叉树最多有2m-1个结点(★★★★)
4、在任意一棵二叉树中,度为0的结点(叶子结点)总是比度为2的结点多一个(★★★★)
5、有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分(★★★★)
例:
1.一棵二叉树共有25个结点,其中5个叶子结点,则度为1的结点数为()【12年3月】
A.4B.6C.10D.16
2.在下列关于二叉树的叙述,选出正确的一项()
A.在二叉树中,任何一个结点的度都是2B.二叉树的度为2
C.在二叉树中至少有一个结点的度是2D.一棵二叉树的度可以小于2
3.一棵二叉树第六层(根结点为第一层)的结点数最多为【05年9月】个。
4.某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有 个结点。
【09年9月】
5.一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为()【07年9月】。
A)219B)221C)229D)231
十二、满二叉树
1、满二叉树——除最后一层外,每一层的所有结点都有两个子结点(满二叉树如下图)
2、满二叉树的每一层上的结点数都达到最大值。
3、满二叉树的第K层上有2K-1个结点。
如:
上图第3层有4个结点(★★★★)
4、深度为m的满二叉树有2m-1个结点。
如:
上图深度为3共有7个结点(★★★★)
例:
1.在深度为7的满二叉树中,叶子结点的个数为()【06年4月】
A)32B)31C)64D)63
2.在深度为7的满二叉树中,度为2的结点个数为【07年4月】。
3.某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()【07年4月】
A)n+1B)n-1C)2nD)n/2
4.一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为()【07年9月】。
A)219 B)221 C)229 D)231
十三、完全二叉树
1、完全二叉树——除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少
右边的若干结点。
(a)完全二叉树(b)完全二叉树(c)非完全二叉树(d)非完全二叉树
2、在完全二叉树中,叶子结点只可能在层次最大的两层上出现。
3、右分支下的子孙结点的最大层次为p,则其左分支下的子孙结点的最大层次为p或p+1。
4、满二叉树也是完全二叉树,而完全二叉树一般不是满二叉树。
5、具有n个结点的完全二叉树的深度为[log2n]+1(★★★★)
6、设完全二叉树共有N个结点。
如果从根结点开始,按层序(每一层从左到右)用自然数1
到N给结点进行编号,则对编号为K(K=1,2,…,N)的结点有以下结论:
①若K=1,则该结点为根结点,它没有父结点;若K>1,则该结点的父结点编号为INT(K/2)。
②若2K<=N,则编号为K的结点的左子结点编号为2K;否则该结点无左子结点,也没有右子结点。
③若2K+1<=N,则编号为K的结点的右子结点编号为2K+1,否则该结点无右子结点。
例如:
1
23
456
(按层序编号的完全二叉树)
例:
上图编号为2的结点(即K=2),那么该结点的左子结点的编号应为4(2*2=4)
十四、二叉树的遍历(指不重复地访问二叉树中的所有结点)(★★★★)
大纲要求:
二叉树的前序、中序、后序遍历
1、前序遍历(根左右或DLR)
方法:
首先访问根结点,然后遍历左子树,最后遍历右子树。
如上图前序遍历的结果是:
ABDECF
2、中序扁历(左根右或LDR)
方法:
首先遍历左子树,然后访问根结点,最后遍历右子树。
如上图中序遍历遍历的结果是:
DBEAFC
3、后序扁历(左右根或LRD)
方法:
首先遍历左子树,然后遍历右子树,最后访问根结点。
如上图后序遍历遍历的结果是:
DEBFCA
例:
1.对如下二叉树
进行后序遍历的结果为()【06年4月】
A)ABCDEF B)DBEAFCC)ABDECF D)DEBFCA
练习:
1.已经某二叉树的后序遍历序列是DACBE,中序遍历序列是DEBAC,则它的前序遍历序列是()。
2.已经某二叉树的前序遍历序列是ABDECF,中序遍历序列是DBEAFC,则它的后序遍历序列是()。
十五、查找技术
大纲要求:
顺序查找与二分法查找算法
(1)顺序查找
1、查找方法:
从线性表的第一个元素开始,依次将线性中