一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求
三.数据结构的定义1.数据的逻辑结构:反映数据元素之间的关系的数据元素集合的表示。数据的逻辑结构包括集合、线形结构、树形结构和图形结构四种。2.数据的存储结构:数据的逻辑结构在计算机存储空间种的存放形式称为数据的存储结构。常用的存储结构有顺序、链接、索引等存储结构。
四.数据结构的图形表示:在数据结构中,没有前件的结点称为根结点;没有后件的结点成为终端结点。插入和删除是对数据结构的两种基本运算。还有查找、分类、合并、分解、复制和修改等。
五.线性结构和非线性结构根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构和非线性结构。线性结构:非空数据结构满足:有且只有一个根结点;每个结点最多有一个前件,最多只有一个后件。非线性结构:如果一个数据结构不是线性结构,称之为非线性结构。常见的线性结构:线性表、栈、队列
六.线性表的定义线性表是n个元素构成的有限序列(A1,A2,A3……)。表中的每一个数据元素,除了第一个以外,有且只有一个前件。除了最后一个以外有且只有一个后件。即线性表是一个空表,或可以表示为(a1,a2,……an),其中ai(I=1,2,……n)是属于数据对象的元素,通常也称其为线性表中的一个结点。非空线性表有如下一些特征:(1)有且只有一个根结点a1,它无前件;(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数n称为线性表的长度。当n=0时称为空表。
七.线性表的顺序存储结构线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构具备如下两个基本特征:1.线性表中的所有元素所占的存储空间是连续的;2.线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。即线性表逻辑上相邻、物理也相邻,则已知第一个元素首地址和每个元素所占字节数,则可求出任一个元素首地址。假设线性表的每个元素需占用K个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:LOC(ai+1)=LOC(ai)+KLOC(ai)=LOC(a1)+(i-1)*K①其中,LOC(a1)是线性表的第一个数据元素a1的存储位置,通常称做线性表的起始位置或基地址。因为在顺序存储结构中,每个数据元素地址可以通过公式①计算得到,所以线性表的顺序存储结构是随机存取的存储结构。在线性表的顺序存储结构下,可以对线性表做以下运算:插入、删除、查找、排序、分解、合并、复制、逆转
十.栈及其基本运算1.什么是栈?栈实际上也是一个线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶(TOP),另一端为栈底(BOTTOM)。当表中没有元素时称为空栈。栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。假设栈S=(a1,a2,a3,……an),则a1称为栈底元素,an称为栈顶元素。栈中元素按a1,a2,a3……an的次序进栈,退栈的第一个元素应该是栈顶元素。即后进先出。2.栈的顺序存储及其运算用S(1:M)作为栈的顺序存储空间。M为栈的最大容量。栈的基本运算有三种:入栈、退栈与读栈顶元素。入栈运算:在栈顶位置插入一个新元素。首先将栈顶指针进一(TOP+1),然后将新元素插入到栈顶指针指向的位置。退栈运算:指取出栈顶元素并赋给一个指定的变量。首先将栈顶元素赋给一个指定的变量,然后将栈顶指针退一(TOP-1)读栈顶元素:将栈顶元素赋给一个指定的变量。栈顶指针不会改变。
十三.线性链表的基本运算1.线性链表的插入2.线性链表的删除
十四.双向链表的结构及其基本运算
在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前驱。
十五.循环链表的结构及其基本运算是另一种形式的链式存储结构,它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。因此,从表中任一结点出发均可找到表中其他结点。
十六.树的定义树是一种简单的非线性结构。树型结构的特点:1.每个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点。2.每一个结点可以有多个后件结点,称为该结点的子结点。没有后件的结点称为叶子结点3.一个结点所拥有的后件个数称为树的结点度4.树的最大层次称为树的深度。
十七.二叉树的定义及其基本性质1.二叉树是另一种树型结构,它的特点是每个结点至多只有二棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。2.二叉树的基本性质①在二叉树的第I层上至多有2i-1个结点。②深度为k的二叉树至多有2k-1个结点(k>=1)③在任意一个二叉树中,度为0的结点总是比度为2的结点多一个;④具有n个结点的二叉树,其深度至少为[log2n]+1。一棵深度为k且有2k-1个结点的二叉树称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。3.满二叉树与完全二叉树满二叉树:除最后一层以外,每一层上的所有结点都有两个子结点。在满二叉树的第K层上有2K-1个结点,且深度为M的满二叉树右2M-1个结点完全二叉树:除最后一层以外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。具有N个结点的完全二叉树的深度为[log2n]+1完全二叉树总结点数为N,若N为奇数,则叶子结点数为(N+1)/2若N为偶数,则叶子结点数为N/24.二叉树的存储结构二叉树通常采用链式存储结构
十八.二叉树的遍历就是遵从某种次序,访问二叉树中的所有结点,使得每个结点仅被访问一次。一般先左后右。1.前序遍历DLR首先访问根结点,然后遍历左子树,最后遍历右子树。2.中序遍历LDR首先遍历左子树,然后根结点,最后右子树3.后序遍历LRD首先遍历左子树,然后遍历右子树,最后访问根结点。
十九.顺序查找与二分查找1.顺序查找在两种情况下只能用顺序查找:线性表为无序表、链式存储结构的有序表2.二分查找只适用于顺序存储的有序表(从小到大)。对于长度为N的有序线性表,在最坏情况下,二分查找只需要比较log2N次,而顺序查找要比较N次。排序:指将一个无序序列整理成按值非递减顺序排列的有序序列。
二十.交换类排序法冒泡排序与快速排序法属于交换类的排序方法1.冒泡排序法假设线性表的长度为N,则在最坏的情况下,冒跑排序需要经过N/2遍的从前往后的扫描和N/2遍的从后往前的扫描,需要的比较次数为N(N-1)/22.快速排序法
二十一.选择类排序法1.简单选择排序法2.堆排序法
二十三.插入类排序法1.简单插入排序法2.希尔排序法最坏情况下最好情况下说明交换排序冒泡排序n(n-1)/2最简单的交换排序。在待排序的元素序列基本有序的前提下,效率最高快速排序n(n-1)/2O(Nlog2N)插入排序简单插入排序n(n-1)/2每个元素距其最终位置不远时适用希尔排序O(n1.5)选择排序简单选择排序n(n-1)/2堆排序O(nlog2n)适用于较大规模的线性表
练习:1.栈和队列的共同特点是(只允许在端点处插入和删除元素)
2.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是(e2,e4,e3,e1)
3.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是(DCBEA)
4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)
5.下列关于栈的叙述正确的是(D)A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征
6.链表不具有的特点是(B)A.不必事先估计存储空间B.可随机访问任一元素C.插入删除不需要移动元素D.所需空间与线性表长度成正比
7.用链表表示线性表的优点是(便于插入和删除操作)
8.在单链表中,增加头结点的目的是(方便运算的实现)
9.循环链表的主要优点是(从表中任一结点出发都能访问到整个链表)
10.线性表L=(a1,a2,a3,……ai,……an),下列说法正确的是(D)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件
11.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以
12.线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构)
13.树是结点的集合,它的根结点数目是(有且只有1)
14.在深度为5的满二叉树中,叶子结点的个数为(31)
15.具有3个结点的二叉树有(5种形态)
16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13)
17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba)
18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA)
19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca)
20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。
1.在计算机中,算法是指(解题方案的准确而完整的描述)
2.在下列选项中,哪个不是一个算法一般应该具有的基本特征(无穷性)说明:算法的四个基本特征是:可行性、确定性、有穷性和拥有足够的情报。
3.算法一般都可以用哪几种控制结构组合而成(顺序、选择、循环)
5.算法的空间复杂度是指(执行过程中所需要的存储空间)
6.算法分析的目的是(分析算法的效率以求改进)
8.数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及(数据的存储结构)
9.数据结构中,与所使用的计算机无关的是数据的(C)A.存储结构B.物理结构C.逻辑结构D.物理和存储结构
11.数据的存储结构是指(数据的逻辑结构在计算机中的表示)
12.数据的逻辑结构是指(反映数据元素之间逻辑关系的数据结构)
13.根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为(线性结构和非线性结构)
14.下列数据结构具有记忆功能的是(C)A.队列B.循环队列C.栈D.顺序表
15.下列数据结构中,按先进后出原则组织数据的是(B)A.线性链表B.栈C.循环链表D.顺序表
16.递归算法一般需要利用(队列)实现。
17.下列关于栈的叙述中正确的是(D)A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表
18.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是(DCBEA)
19.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是(e2,e4,e3,e1)
20.由两个栈共享一个存储空间的好处是(节省存储空间,降低上溢发生的机率)
21.应用程序在执行过程中,需要通过打印机输出数据时,一般先形成一个打印作业,将其存放在硬盘中的一个指定(队列)中,当打印机空闲时,就会按先来先服务的方式从中取出待打印的作业进行打印。
22.下列关于队列的叙述中正确的是(C)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表
23.下列叙述中,正确的是(D)A.线性链表中的各元素在存储空间中的位置必须是连续的B.线性链表中的表头元素一定存储在其他元素的前面C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D.线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的
24.下列叙述中正确的是(A)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构
25.线性表L=(a1,a2,a3,……ai,……an),下列说法正确的是(D)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件
26.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(连续不连续都可以)
27.链表不具有的特点是(B)A.不必事先估计存储空间B.可随机访问任一元素C.插入删除不需要移动元素D.所需空间与线性表长度成正比
28.非空的循环单链表head的尾结点(由p所指向),满足(p->next=head)
29.与单向链表相比,双向链表的优点之一是(更容易访问相邻结点)
30.在(D)中,只要指出表中任何一个结点的位置,就可以从它出发依次访问到表中其他所有结点。A.线性单链表B.双向链表C.线性链表D.循环链表
31.以下数据结构属于非线性数据结构的是(C)A.队列B.线性表C.二叉树D.栈
32.树是结点的集合,它的根结点数目是(有且只有1)
33.具有3个结点的二叉树有(5种形态)
34.在一棵二叉树上第8层的结点数最多是(128)注:2K-1
35.在深度为5的满二叉树中,叶子结点的个数为(16)注:2n-1
36.在深度为5的满二叉树中,共有(31)个结点。注:2n-1
37.设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为(350)说明:完全二叉树总结点数为N,若N为奇数,则叶子结点数为(N+1)/2;若N为偶数,则叶子结点数为N/2。
38.设有下列二叉树,对此二叉树中序遍历的结果是(B)A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA
39.已知二叉树后序遍历序列是dabec,中序遍历序列debac,它的前序遍历序列是(cedba)
40.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA)
41.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca)
42.串的长度是(串中所含字符的个数)
43.设有两个串p和q,求q在p中首次出现位置的运算称做(模式匹配)
44.N个顶点的连通图中边的条数至少为(N-1)
45.N个顶点的强连通图的边数至少有(N)
46.对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为(N)
47.最简单的交换排序方法是(冒泡排序)
48.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为(n(n-1)/2)
49.在待排序的元素序列基本有序的前提下,效率最高的排序方法是(冒泡排序)
51.希尔排序法属于(插入类排序)
52.堆排序法属于(选择类排序)
53.在下列几种排序方法中,要求内存量最大的是(归并排序)
55.算法的基本特征是可行性、确定性、有穷性和拥有足够的情报。
1.一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。
3.所谓数据处理是指对数据集合中的各元素以各种方式进行运算,包括插入、删除、查找、更改等运算,也包括对数据元素进行分析。
4.数据结构是指相互有关联的数据元素的集合。
5.数据结构分为逻辑结构与存储结构,线性链表属于存储结构。
6.数据结构包括数据的逻辑结构和数据的存储结构。
7.数据结构包括数据的逻辑结构、数据的存储结构以及对数据的操作运算。
8.数据元素之间的任何关系都可以用前趋和后继关系来描述。
9.数据的逻辑结构有线性结构和非线性结构两大类。
10.常用的存储结构有顺序、链接、索引等存储结构。
11.顺序存储方法是把逻辑上相邻的结点存储在物理位置相邻的存储单元中。
12.栈的基本运算有三种:入栈、退栈与读栈顶元素。
13.队列主要有两种基本运算:入队运算与退队运算。
14.在实际应用中,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。
15.栈和队列通常采用的存储结构是链式存储和顺序存储。
16.当线性表采用顺序存储结构实现存储时,其主要特点是逻辑结构中相邻的结点在存储结构中仍相邻。
17.循环队列主要有两种基本运算:入队运算与退队运算。每进行一次入队运算,队尾指针就进1。
18.当循环队列非空且队尾指针等于对头指针时,说明循环队列已满,不能进行入队运算。这种情况称为上溢。
19.当循环队列为空时,不能进行退队运算,这种情况称为下溢。
20.在一个容量为25的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有18个元素。注:当rear
21.在一个容量为15的循环队列中,若头指针front=6,尾指针rear=9,则该循环队列中共有3个元素。
22.顺序查找一般是指在线性表中查找指定的元素。
23.在计算机中存放线性表,一种最简单的方法是顺序存储。
24.在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储空间。
25.在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域,另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或
后一个结点(即前件或后件)。
26.在线性单链表中,每一个结点只有一个指针域,由这个指针只能找到后继结点,但不能找到前驱结点。
27.为了要在线性链表中插入一个新元素,首先要给该元素分配一个新结点,以便用于存储该元素的值。
28.在线性链表中删除一个元素后,只需要改变被删除元素所在结点的前一个结点的指针域即可。
29.用链表表示线性表的突出优点是便于插入和删除操作。
30.在树形结构中,树根结点没有前件。
31.在树结构中,一个结点所拥有的后件个数称为该结点的度。叶子结点的度为0。
32.设一棵二叉树中有3个叶子结点,8个度为1的结点,则该二叉树中总的结点数为13。
33.设一棵完全二叉树共有739个结点,则在该二叉树中有370个叶子结点。
34.设一棵完全二叉树共有700个结点,则在该二叉树中有350个叶子结点。
35.在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历。
36.若串S="Program",则其子串的数目是29。注:n(n+1)/2+1
37.若串S=”MathTypes”,则其子串的数目是46。
38.对长度为n的线性表进行插入一个新元素或删除一个元素时,在最坏情况下所需要的比较次数为n。
39.在长度为n的有序线性表中进行顺序查找。最坏的情况下,需要的比较次数为n。
40.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为log2n。
41.长度为n的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为n/2。
42.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、交换排序和选择排序等。
43.快速排序法可以实现通过一次交换而消除多个逆序。
44.快速排序法的关键是对线性表进行分割。
45.冒泡排序算法在最好的情况下的元素交换次数为0。
47.对于长度为n的线性表,在最坏情况下,快速排序所需要的比较次数为n(n-1)/2。
48.在最坏情况下,简单插入排序需要比较的次数为n(n-1)/2。
49.在最坏情况下,希尔排序需要比较的次数为O(n1.5)。注:括号里是n的1.5次方。
50.在最坏情况下,简单选择排序需要比较的次数为n(n-1)/2。
51.在最坏情况下,堆排序需要比较的次数为o(nlog2n)。
第二章程序设计基础
一.程序设计方法与风格当今主导的程序设计风格是“清晰第一,效率第二”的观点。1.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(C)。A.安全性B.一致性C.可理解性D.合理性2.对建立良好的程序设计风格,下面的描述正确的是(A)A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无3.在设计程序时.应采纳的原则之一是(D)。A.不限制GOTO语句的使用B.减少或取消注解行C.程序越短越好D.程序结构应有助于读者理解4.程序应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。5.源程序文档化要求程序应加注释,注释一般分为序言性注释和功能性注释。6.在编写程序时,需要注意数据说明的风格,以便使程序中的数据说明更易理解和维护。7.当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性程序设计语言的基本成分是数据成分、运算成分、控制成分和(传输成分)。
第三章软件工程重点:需求分析、概要设计、详细设计、软件测试和软件调试的作用、方法等
五、程序的调试软件调试(Debug,即排错)的任务是诊断和改正程序中的错误,与软件测试不同,软件测试是尽可能多地发现软件中的错误。软件测试贯穿整个软件生命期,调试主要在开发阶段。62.程序调试的基本步骤:错误定位、修改和设计代码以排除错误、进行回归测试防治引进新的错误。63.下列叙述正确的是(D)A.测试和调试工作必须由程序编制者自己完成B.测试用例和调试用例必须完全一致C.一个程序经调试改正错误后,一般不必再进行测试D.上述三种说法都不对软件调试方法64.下列不属于软件调试技术的是(B)。A.强行排错法B.集成测试法C.回溯法D.原因排除法
六、软件维护65.软件维护活动包括以下几类:校正性维护、适应性维护、完善性维护和预防性维护。
第四章数据库设计基础
三、关系代数29.关系操作的特点是集合操作。30.关系数据库的关系演算语言是以谓词演算为基础的DML语言。31.一个关系中属性个数为l时,称此关系为(一元关系)。32.关系表中的每一横行称为一个(元组)。33.下列关系模型中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是(B)。A.选择B.连接C.投影D.并34.关系运算是从二维表列的方向进行的运算。35.关系数据库管理系统应能实现的专门的关系运算包括(选择、投影、连接)。